开发者社区> 问答> 正文

activeMQ无法发送topic消息?报错

我在学习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();
				}
			}
		}

	}

展开
收起
爱吃鱼的程序员 2020-06-22 22:56:54 852 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    改成监听试试,topic本来就是发布/订阅模型请问你的意思是使用TopicSession,然后用session.createPublisher()吗?<divclass="ref">

    引用来自“左国党”的答案

    <divclass=ref_body>改成监听试试,topic本来就是发布/订阅模型这个我有啊,问题是没发出去,而不是收不到,请问能不能给你测试成功的demo?谢谢<preclass="brush:java;toolbar:true;auto-links:false;">packagecn.zuoguodang.mq;importjavax.jms.Connection;importjavax.jms.JMSException;importjavax.jms.Message;importjavax.jms.MessageConsumer;importjavax.jms.MessageListener;importjavax.jms.MessageProducer;importjavax.jms.Session;importjavax.jms.TextMessage;importjavax.jms.Topic;importorg.apache.activemq.ActiveMQConnection;importorg.apache.activemq.ActiveMQConnectionFactory;importorg.apache.activemq.command.ActiveMQTopic;publicclassTopicTest{publicstaticvoidmain(String[]args)throwsException{Stringurl=ActiveMQConnection.DEFAULT_BROKER_URL;ActiveMQConnectionFactoryfactory=newActiveMQConnectionFactory(url);Connectionconnection=factory.createConnection();connection.start();Topictopic=newActiveMQTopic("zuoguodang");Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);MessageConsumercomsumer1=session.createConsumer(topic);comsumer1.setMessageListener(newMessageListener(){publicvoidonMessage(Messagem){try{System.out.println("消费者1获取到的消息:"+((TextMessage)m).getText());}catch(JMSExceptione){e.printStackTrace();}}});MessageConsumercomsumer2=session.createConsumer(topic);comsumer2.setMessageListener(newMessageListener(){publicvoidonMessage(Messagem){try{System.out.println("消费者2获取到的消息:"+((TextMessage)m).getText());}catch(JMSExceptione){e.printStackTrace();}}});MessageProducerproducer=session.createProducer(topic);for(inti=0;i<10;i++){producer.send(session.createTextMessage("消息:"+i));}}}我们一般都用queue回复<aclass='referer'target='_blank'>@左国党:不好意思。这是刚开始学习,我看了你代码看了半天,开始一看是一样的啊,啥情况呢?再一想,程序流转的问题,唉。。。。回复<aclass='referer'target='_blank'>@张浩春:呵呵<aclass='referer'target='_blank'>@左国党我擦啊,,我先启动发送消息,再启动监听程序的,坑啦!!!!。。。这个我的也可以啊,就是把queue改成topic就会出问题,郁闷

    2020-06-23 11:51:40
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
消息队列kafka介绍 立即下载
Rocket MQ 使用排查指南 立即下载
RocketMQ 新特性揭秘- Request-Reply 立即下载