gpt4 book ai didi

java - 无法使用activemq获取异步消息

转载 作者:行者123 更新时间:2023-11-30 04:39:34 24 4
gpt4 key购买 nike

大家好,我无法使用 Activity mq 接收异步消息,下面的代码是我用于发布消息并订阅它的代码。

    public class publishMessage extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

InitialContext initCtx = new InitialContext();
Context envContext = (Context) initCtx.lookup("java:comp/env");
ActiveMQConnectionFactory connectionFactory = (ActiveMQConnectionFactory) envContext.lookup("jms/ConnectionFactory");
Connection connection = connectionFactory.createConnection();
connection.start() ;
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("jms/topic/MyQueue");
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT) ;
TextMessage msg=session.createTextMessage();
msg.setText("Message sent");
System.out.println("Message Sent");
producer.send(msg);
session.commit() ;
connection.close() ;
}catch(Exception ex){
ex.printStackTrace() ;
}
}}


class Consumer{

protected Queue queue;


protected String queueName = "jms/topic/MyQueue";

protected String url = ActiveMQConnection.DEFAULT_BROKER_URL;

protected int ackMode = Session.AUTO_ACKNOWLEDGE;

public static void main(String[] args) {
Consumer rec=new Consumer();
try {
rec.run();
} catch (Exception e) {
e.printStackTrace();
}

}

public void run() throws JMSException{

System.out.println("URL:" + url);
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
TopicConnection connection = (TopicConnection)connectionFactory.createTopicConnection();
connection.setClientID("Testingconn1") ;
connection.start();
MessageConsumer consumer = null;
Session session = connection.createSession(true, Session.CLIENT_ACKNOWLEDGE);
queue = session.createQueue(queueName) ;
consumer = session.createConsumer(queue);
consumer.setMessageListener(new MyListener()) ;
session.commit() ;
consumer.close();
session.close();
connection.close();
}

}

package com.java;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

public class MyListener implements MessageListener{

@Override
public void onMessage( final Message message )
{
if ( message instanceof TextMessage )
{
final TextMessage textMessage = (TextMessage) message;
try
{
System.out.println("Listener:" + textMessage.getText() );
}
catch (final JMSException e)
{
e.printStackTrace();
}
}

}
}

当我执行上述代码时,发布者成功发送一条消息,并且当我启动消费者时,输出按要求出现,没有输出进入我的控制台。

请帮助我解决它或建议一个代码来接收异步消息。

最佳答案

您的消费者代码实际上并没有给消费者任何时间来消费消息。当消费者将存活一段时间并且您的应用程序可以处理传入消息时,将使用异步消费者。在上面的代码中,您最好使用 MessageConsumer 的定时接收方法,例如Consumer.receive(5000) 或一些适合您应用程序的时间段。不能保证您的消费者在创建后立即收到消息,因为代理需要时间来注册消费者并将消息路由到它,因此您必须在您的应用程序中允许这一点。

关于java - 无法使用activemq获取异步消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12636300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com