2011-07-17 5 views
0

RabbitMQ 대기열을 듣고 사용자에게 새로운 이슈 (이미 Nagios가 RabbitMQ에 알림을 보내고 있음)를 알리는 메시지를 XMPP 채널로 보내는 XMPP 봇을 작성하는 방법을 찾고 있습니다.AMQP와 XMPP를 연결합니다.

xmppy를 사용해 보았는데 작동이 멈췄다. 그리고 나는 꽤 좋아 보이는 SleekXMPP를 우연히 발견했다.

봇의 XMPP "send"메소드를 자동으로 호출하는 AMQP 수신기를 정의했는지 궁금합니다. 따라서 AMQP와 XMPP를 동시에 듣게됩니다.

도움 주셔서 감사합니다.

편집 : BOSH가 훨씬 더 나은 해결책이 될까요?

+0

같은 ejabberd와 XMPP 플러그인을 사용할 수 있습니다. 지금까지 작성한 코드를 게시 할 수 있습니까? – SingleNegationElimination

답변

1

솔루션의 가장 흥미로운 부분은이 공간에있는 많은 라이브러리가 유일한 이벤트 루프라고 가정한다는 것입니다. 각각의 스레드를 자체 스레드에 배치해야하지만 (겉으로보기 쉽지만 잠금 문제가 짙은) Twisted과 같은 비 차단 I/O 접근 방식을 사용하거나 (AMQP library 필요) 소켓을 추출해야합니다 사용중인 각 라이브러리에서 파일 디스크립터를 열고 select() 또는 poll()을 실행하여 읽을 데이터가있는시기를 알려줍니다. 이 세 가지 중에서, Twisted 방식은 나에게 가장 쉬운 방법입니다.

BOSH는 문제를 더 어렵게 만듭니다. 그렇게하지 마십시오.

+0

나는 이것으로 오늘 놀았고, 2 시간 후에 remebered 나는 여기를 살펴볼 것이다. 누군가가 이것을 읽고 있고 똑같은 문제에 빠져 있다면. AMQP (Pika 사용) 리스너를 실행하고 SleekXMPP를 스레드 (xmpp.process (threaded = True)) 프로세스로 실행하도록 설정하십시오. 지금까지 효과가 있습니다. 두 리스너 모두 같은 "파일"에 있습니다. – Tabiko

1

이것은 매우 간단합니다. 수신 메시지를 단순히 출력하는 AMQP 수신기를 작성하는 것으로 시작하는 것이 좋습니다. 일단 그 작업을하면 XMPP 봇에 통합하는 방법을 분명히해야합니다.

관련 문제