문제

Apache.nms 및 Apcahe.nms.ActiveMQ (버전 1.0) 라이브러리를 사용하여 Windows 서비스를 작성했습니다. 이 서비스는 공급 업체 서버에서 ActiveMQ의 메시지를 소비합니다.

서비스는 연결을 회전시키고 메시지에 대해 청취합니다 (OnMessage 이벤트를 처리합니다).

연결은 거래 된 연결이므로 각 메시지 후에 커밋을 호출합니다.

서비스가 시작되면 모든 것이 매우 잘 작동하며 잠시 동안 그렇게합니다. 그러나 잠시 동안 실행되면 더 이상 메시지를 소비하지 않습니다. 서비스를 재설정하더라도. 일반적으로 내 서비스와 공급 업체 서버 (TOMCAT)를 다시 시작하여 일을 다시 시작합니다. 공급 업체는 자신의 편에 아무런 문제가 없다고 주장합니다.

양쪽 (클라이언트 또는 서버)에 예외가 발생하지 않습니다. 단지 '고정'입니다.

spring.messaging.nms 사용을 고려해야합니까?

도움이 되었습니까?

해결책

나는 문제를 발견했다. 연결 및 메시지 청취자를 설정 한 후 서비스는 Thread.Sleep (500)와 함께 루프로 들어갔다. 멍청한. 서비스를 재조정하여 OnStart에서 모든 것을 시작하고 OnStop에 처리했습니다.

그렇게했기 때문에 모든 것이 완벽하게 실행되고 있습니다.

키보드와 의자 사이에서 클래식 ID-10-T 오류가 발생합니다.

다른 팁

신경 쓰지 마세요. 여기서 찾았습니다.

ActiveMQ 및 NMS를 통한 트랜잭션 메시지 처리

내 코드는 조금 다릅니다. 루프에서 폴링하는 대신 "OnMessage"이벤트에 응답하는 리스너를 설정했습니다. 내 코드는 아래 코드와 유사합니다. 내 실제 코드에는 그 안에 많은 관련이없는 것들이 있지만 정신은 동일합니다. 이것이 도움이되기를 바랍니다.

factory = new Apache.NMS.ActiveMQ.ConnectionFactory("tcp://activemq:61616");

connection = factory.QueueConnection(factory, "MyQueue", AcknowledgementMode.AutoAcknowledge)

consumer = connection.Session.CreateConsumer(connection.Queue, "2 > 1"); //Get every msg

consumer.Listener += new MessageListener(OnMessage);


private void OnMessage(IMessage message)
{
  //Process message here.;
}

우리는 activeemq와 대화하는 .NET 서비스를 사용하여 정확히 같은 문제를 발견했지만 약 10-20 개의 메시지가 전달 된 후에도 잠이 듭니다.

스프링 프레임 워크의 유무에 관계없이 시도해 보았으며 (상상하지 않는 한) 약간 더 좋습니다.

이 코드를 확인하고 자신의 유사점이 있는지 알려 주시겠습니까?

ConnectionFactory connectionFactory = new ConnectionFactory("tcp://activemq:61616");

Connection connection = (Connection)connectionFactory.CreateConnection();
connection.Start();

Session session = (Session)connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
IDestination queue = session.GetQueue("test.queue");

MessageConsumer consumer = (MessageConsumer)session.CreateConsumer(queue);

for (int i = 0; i < 1000; i++)
{
    IMessage msg = consumer.Receive();
    if (msg != null)
        Console.WriteLine((msg as ITextMessage).Text);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top