2011-06-10 1 views
2

ActiveMQ를 사용하고 IIS/AppFabric 내에서 실행되는 단일 인스턴스 WCF 서비스를 결합하는 가장 좋은 방법은 무엇입니까?WCF 및 IIS 시작시 ActiveMQ에 연결하는 방법

Google 서비스는 HTTP 전송과 ActiveMQ (수신 및 전송 메시지)를 모두 지원해야합니다. MSMQ를 사용하지 않기로 선택했으며 Spring.Net.NMS를 사용합니다. 필자가 지금 가지고있는 근본적인 문제는 ActiveMQ가 시작시 대기열에 연결되어 있고 연결 상태를 유지해야하지만 메시지 활성화 기능으로 인해 방해가되고 있다는 것입니다. 메시지가 도착할 때까지 서비스가 활성화되지 않으면 (HTTP/MSMQ 등) AMQ에 대한 연결을 트리거 할 수 없습니다.

나는 재활용 동작을 비활성화 할 수 있음을 알고 있으며 Windows 서비스를 통해 자체 호스팅을 수행 할 수 있음을 알고 있습니다. 하지만 AppFabric의 모니터링 및 기타 기능을 활용하고 싶습니다. IServiceBehavior를 사용하여 이미 경로를 따라 갔으며 다른 좋은 것들을 위해 사용할 것입니다. 그러나 (비 AMQ) 메시지가 도착할 때까지 해당 인터페이스가 호출되지 않습니다. 그래서 이것 때문에 효과가 없을 것입니다. 내가 바라는 것은 Java에서 ServletContextListeners가 작동하는 방식을 따르는 것으로, 시작 및 종료 이벤트를 모두 얻을 수 있습니다. 그러나 WAS에는 그러한 것들이 존재하지 않는 것 같습니다. 그것은 도착하는 메시지에 의해서만 움직입니다.

3 일 동안 모든 웹 정보를 훑어 보았습니다. 그 중 유일하게 정적 클래스 생성 (C#) 트릭을 트리거로 사용했습니다. 그건 해킹이지만, 나는 그걸로 살 수 있습니다. 그것은 여전히 ​​깨끗하게 셧다운 문제를 남긴다. 나는 나중에 알아낼 수있다.

누구나 단색 솔루션이 있습니까?

답변

1

direct WCF support for ActiveMQ이 있었지만 더 이상 개발되지 않았다고 생각합니다. 귀하의 문제는 실제로 IIS/WAS (non-http 프로토콜 용 호스팅 제공) 아키텍처 호스팅입니다. 메시지가 도착하면 WAS의 서비스가 항상 활성화됩니다. 글로벌 시작은 없습니다. 그 이유는 WAS 호스팅에서는 리스너를 항상 실행하는 별도의 프로세스 (Windows 서비스)가 필요하며이 프로세스에는 WAS를 호출하고 메시지 레벨 활성화를 사용하는 어댑터가 있기 때문입니다. ActiveMQ에 대한 프로세스가 없으므로 WAS에서 호스팅되는 ActiveMQ 끝점을 사용하는 데 어려움이 있습니다. 그러한 청취자를 개발하는 것은 어려운 과제가 될 수 있습니다 (example for UDP).

IIS 7.5/AppFabric auto start feature을 사용하면 사용자 지정 수신기를 만드는 것을 피할 수 있습니다. run the code when the application starts에도 잘 설명 된 방법이 없습니다.

4

Ladislav가 언급 한 ActiveMQ에 대한 직접 WCF 지원이 아직 지원되고 있습니다. 잠시 동안 모듈을 공식 릴리스하지 않았습니다. 그러나 1.5.x 브랜치 또는 트렁크에서 최신 버전을 가져 와서 직접 컴파일 할 수 있습니다. https://svn.apache.org/repos/asf/activemq/activemq-dotnet/Apache.NMS.WCF/branches/1.5.x/

체크 아웃 지침 : http://activemq.apache.org/nms/source.html

Apache.NMS 1.5.0와 함께 사용하기위한

1.5.x 이하 지점