activeMQ无法发送topic消息

发布于 2021-11-13 06:26:15 字数 1106 浏览 804 评论 9

我在学习activeMQ的时候发现一个很奇怪的问题,发送queue消息时能正常发送和接收,但是如果我换成topic的话,一直收不到消息,也不报错,开始不知道为什么,后来用BrokerService.getAdminView().getTotalMessageCount(),监测发现queue的时候有消息数目,但topic没有,不知道为什么,贴上代码先吧,求大神解释!!!!!

public static void send() {
		Connection conn = null;
		try {
			conn = factory.createConnection();

			Session session = conn.createSession(false,
					Session.AUTO_ACKNOWLEDGE);
			Destination des = null;
			// Destination
			//des = session.createQueue("myQueue");
		        des = session.createTopic("topictest.messages");
			conn.start();
			MessageProducer producer = session.createProducer(des);
			producer.setDeliveryMode(DeliveryMode.PERSISTENT);
			TextMessage msg = session.createTextMessage();
			msg.setText("测试");
			producer.send(msg);
		} catch (JMSException e) {
			e.printStackTrace();
		} finally {
			System.out.println("-----消息发送完毕!");
			if (conn != null) {
				try {
					conn.stop();
					conn.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}

	}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

勿忘初心 2021-11-19 01:49:58

。。。这个我的也可以啊,就是把queue改成topic就会出问题,郁闷

顾挽 2021-11-19 01:49:34

回复
呵呵

归途 2021-11-19 01:38:09

回复
不好意思。这是刚开始学习,我看了你代码看了半天,开始一看是一样的啊,啥情况呢?再一想,程序流转的问题,唉。。。。

等风来 2021-11-19 01:37:05

我们一般都用queue

夜无邪 2021-11-19 00:46:11
package cn.zuoguodang.mq;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

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


public class TopicTest {

    public static void main(String[] args) throws Exception {
        
        String url = ActiveMQConnection.DEFAULT_BROKER_URL; 
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(url);
   
        Connection connection = factory.createConnection();
        connection.start();
       
        Topic topic= new ActiveMQTopic("zuoguodang");
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        
        MessageConsumer comsumer1 = session.createConsumer(topic);
        comsumer1.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println("消费者1获取到的消息:" + ((TextMessage)m).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
       
        MessageConsumer comsumer2 = session.createConsumer(topic);
        comsumer2.setMessageListener(new MessageListener(){
            public void onMessage(Message m) {
                try {
                    System.out.println("消费者2获取到的消息:" + ((TextMessage)m).getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
           
        });
       
        MessageProducer producer = session.createProducer(topic);
        for(int i=0; i<10; i++){
            producer.send(session.createTextMessage("消息:" + i));
        }
    }

}
平定天下 2021-11-18 23:31:37

这个我有啊,问题是没发出去,而不是收不到,请问能不能给你测试成功的demo?谢谢

离不开的别离 2021-11-18 17:48:43

改成监听试试,topic本来就是发布/订阅模型

成熟的代价 2021-11-18 16:08:41

请问你的意思是使用TopicSession,然后用session.createPublisher()吗?

柳若烟 2021-11-18 15:11:26

改成监听试试,topic本来就是发布/订阅模型

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文