1

こんにちは私はプロデューサーとコンシューマーを持つJavaコードを持っています。プロデューサーはメッセージをキューに送信し、コンシューマーもメッセージを受け取りますが、メッセージが表示されない理由がわかりません。activeMQを使用していますが、メッセージが表示されなかったため、http:/localhost:8161/admin/queues.jspにチェックインすると、キューにプロデューサーとコンシューマーの両方があることが示されていますが、メッセージはコマンドプロンプト。教えてください

producer.java

import javax.jms.*;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Producer {

    private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
    private static String subject = "test";

    public static void main(String[] args) throws JMSException {

        ConnectionFactory connectionFactory =
            new ActiveMQConnectionFactory(url);
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(false,
            Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue(subject);
        MessageProducer producer = session.createProducer(destination);

        TextMessage message = session.createTextMessage("this is a g message");
        producer.send(message);

        System.out.println("Sent message '" + message.getText() + "'");
System.out.println( ActiveMQConnection.DEFAULT_BROKER_URL);
        connection.close();
    }
}

Consumer.java

import javax.jms.*;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Consumer {

    private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
    private static String subject = "test";

    public static void main(String[] args) throws JMSException {

        ConnectionFactory connectionFactory
            = new ActiveMQConnectionFactory(url);
        Connection connection = connectionFactory.createConnection();
        connection.start();

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

        Destination destination = session.createQueue(subject);
        MessageConsumer consumer = session.createConsumer(destination);
        Message message = consumer.receive();

        if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            System.out.println("Received message '"
                + textMessage.getText() + "'");
        }
        connection.close();
    }
}
4

2 に答える 2

-1

必ずimplement MessageListener

public class Consumer implements MessageListener 

そして、次のようにオーバーライドする必要がありますonMessage

@Override
    public void onMessage(Message message) {

        if(message instanceof TextMessage){
                  //DO something
   }
}

このコンシューマを設定する際には、次のことを行う必要があります:-

ActiveMQConnectionFactory connectionFactory= new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
Connection jmsConnection = connectionFactory.createConnection(userName,passWord);

            jmsConnection.start();
            Session jmsSession =  jmsConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);


            Destination destination = jmsSession.createQueue(queuname);

            //Subscribing to a Topic
            MessageConsumer msgConsumer = jmsSession.createConsumer(destination);
            msgConsumer.setMessageListener(this);


編集
このコードは、キューに到着するとすぐにメッセージをリッスンし続けます。このブロックをメイン メソッド内に追加すると、これが機能します。お役に立てれば。

于 2013-03-06T14:36:57.210 に答える