2

Java クライアントとして Apache Qpid (0.3) で Azure サービス バス キュー (AMQP プロトコル) を使用しています。
また、Spring JmsTemplate を使用してメッセージを生成し、DefaultMessageListenerContainer を使用してコンシューマー、Spring JMS 4.0.6 を管理しています。

春の構成:

@PostConstruct
private void JndiLookup() throws NamingException {
    // Configure JNDI environment
    Hashtable<String, String> envPrp = new Hashtable<String, String>();
    envPrp.put(Context.INITIAL_CONTEXT_FACTORY,
            PropertiesFileInitialContextFactory.class.getName());
    envPrp.put("connectionfactory.SBCF", "amqps://owner:{parimeryKey}@{namespace}.servicebus.windows.net");
    envPrp.put("queue.STORAGE_NEW_QUEUE", "QueueName");
    context = new InitialContext(envPrp);
}

@Bean
public ConnectionFactory connectionFactory() throws NamingException {
    ConnectionFactory cf = (ConnectionFactory) context.lookup("SBCF");
    return cf;
}

@Bean
public DefaultMessageListenerContainer messageListenerContainer() throws NamingException {
    DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer();
    messageListenerContainer.setConnectionFactory(connectionFactory());
    Destination queue = (Destination) context.lookup("QueueName");
    messageListenerContainer.setDestination(queue);
    messageListenerContainer.setConcurrency("3-10");
    MessageListenerAdapter adapter = new MessageListenerAdapter();
    adapter.setDelegate(new MessageWorker());
    adapter.setDefaultListenerMethod("onMessage");
    messageListenerContainer.setMessageListener(adapter);
    return messageListenerContainer;
}

@Bean
public JmsTemplate jmsTemplate() throws NamingException {
    JmsTemplate jmsTemplate = new JmsTemplate();
    jmsTemplate.setConnectionFactory(connectionFactory());
    return jmsTemplate;
}

単純な構成で空想的なことは何もありません。

コードを実行すると、すべてが機能しているように見えます..しかし、数分後にキューにトラフィックがない場合、コンシューマーはキューとの接続を失い、メッセージを受信して​​いないようです。

関連しているかどうかはわかりませんが、5 分ごとに次の警告が表示されます。

Fri Nov 07 15:23:53 +0000 2014, (DefaultMessageListenerContainer.java:842) WARN : Setup of JMS   message listener invoker failed for destination   'org.apache.qpid.amqp_1_0.jms.impl.QueueImpl@8fb0427b' - trying to recover. Cause: Force detach the   link because the session is remotely ended. 
Fri Nov 07 15:23:56 +0000 2014, (DefaultMessageListenerContainer.java:891) INFO : Successfully refreshed JMS Connection

メッセージが何時間もキューにあり、アプリを再起動したときにのみ消費者によって処理されず、消費者が接続を適切に更新してメッセージを受け取ります。

問題は Spring Listener コンテナ プロパティまたは qpid 接続ファクトリにある可能性がありますか、それとも Azure サービス バスの問題ですか??

私の状況に関連する投稿が見つかりませんでした。助けていただければ幸いです!!

4

0 に答える 0