2

私はこのSpringIntegrationとJMSを初めて使用し、それを使い始めました。ここでは、activemqを介してプレーンなjmsメッセージを作成し、スプリングインバウンドアダプター(メッセージ駆動型)を介して受信します。

以下は私の春の設定ファイルです

    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:stream="http://www.springframework.org/schema/integration/stream"
xmlns:jms="http://www.springframework.org/schema/integration/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/integration
        http://www.springframework.org/schema/integration/spring-integration.xsd
        http://www.springframework.org/schema/integration/stream
        http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd>
        http://www.springframework.org/schema/integration/jms
        http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsd">

<!-- jms beans -->
<beans:bean id="jms.msgQueue" class="org.apache.activemq.command.ActiveMQQueue">
    <beans:constructor-arg value="MSG_QUEUE" />
</beans:bean>

<beans:bean name="jms.connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <beans:property name="brokerURL" value="tcp://localhost:61616" />
</beans:bean>


 <!-- spring integration beans -->
<channel id="channels.jms.allMessages">
    <queue capacity="1000" />
</channel>

<jms:message-driven-channel-adapter id="adapters.jms.msgAdapter"
            connection-factory="jms.connectionFactory"
            destination="jms.msgQueue"
             channel="channels.jms.allMessages" />

これは私のテストクラスです

package com.bst.jms;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.Message;
import org.springframework.integration.core.PollableChannel;

public class TestActiveMQ {

public static void main(String[] args){

    try{
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("app-context.xml");
        ConnectionFactory connectionFactory = (ConnectionFactory)context.getBean("jms.connectionFactory");
        Destination destination = (Destination)context.getBean("jms.msgQueue");
        PollableChannel msgChannel = (PollableChannel) context.getBean("channels.jms.allMessages", PollableChannel.class );

        Connection connection = connectionFactory.createConnection();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);


        MessageProducer producer = session.createProducer(destination);

         TextMessage textMessage = session.createTextMessage();
         textMessage.setText("Message from JMS");
         producer.send(textMessage);


         System.out.println("--------------- Message Sending ------------------------");

         Message<?> received = msgChannel.receive();
         String payload = (String) received.getPayload();

         System.out.println("Receving message = " + payload);
    }catch(JMSException ex){
        System.out.println("----------- JMS Exception --------------");
    }

}

}

しかし、事は私が配達を保証することができないということです。プログラムがメッセージを受信できない場合や、プログラムが成功し、次のような警告が表示される場合があります。

Setup of JMS message listener invoker failed for destination 'queue://MSG_QUEUE' -   trying to recover. Cause: Connection reset
Could not refresh JMS Connection for destination 'queue://MSG_QUEUE' - retrying in 5000 ms. Cause: Could not connect to broker URL: tcp://localhost:61616. Reason: java.net.ConnectException: Connection refused: connect

宛先'queue://MSG_QUEUE'のJMS接続を更新できませんでした-5000ミリ秒で再試行します。原因:ブローカーURLに接続できませんでした:tcp:// localhost:61616。理由:java.net.ConnectException:接続が拒否されました:接続

これは、成功する前に数回発生します。

皆さんはこれについて何か考えがありますか。

あなたの助けに感謝。

ありがとう、ケス

4

2 に答える 2

3

これは、リスナー コンテナーの開始時にブローカーが実行されていないことを意味します。tcp:// URL を使用する場合、このコンテキストを作成する前に、独自のコンテキスト (または別の JVM) でブローカーを実行する必要があります。

于 2012-08-08T15:51:27.997 に答える
2

これらのコードを STS でテストしましたが、正常に動作しています。

あなたの側の唯一の問題は、最初にメッセージブローカー(ActiveMQなど)を開始してからプロジェクトを実行すると、必要な出力を取得できることです。

ありがとう。

于 2012-08-10T09:05:52.627 に答える