发布到 ActiveMQ 主题不起作用
Publishing to ActiveMQ topic doesn't work
我在 java 中写了一个 Publisher class 以便通过主题发送消息。
package com.jms.jms_ps;
import java.util.Properties;
import javax.naming.*;
import javax.jms.*;
/**
*
* @author achref
*/
public class Publisher {
Context ctx;
TopicConnectionFactory connectionFactory;
Topic topic;
TopicConnection connection;
TopicSession session;
TopicPublisher publisher;
Publisher() throws NamingException{
Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
props.setProperty(Context.PROVIDER_URL, "tcp://localhost:61616");
ctx = new InitialContext(props);
connectionFactory = (TopicConnectionFactory) ctx.lookup("ConnectionFactory");
topic = (Topic) ctx.lookup("dynamicTopics/myTopic");
}
void sendTextMessage(String msg) throws JMSException{
connection = connectionFactory.createTopicConnection();
session = connection.createTopicSession(true, 0);
publisher = session.createPublisher(topic);
TextMessage message = session.createTextMessage();
message.setText(msg);
connection.start();
publisher.publish(message);
connection.close();
}
}
问题是每次我尝试发送消息时,它都没有添加到我的主题中(Messages Enqueued
等于零),因此订阅者什么也收不到。
ActiveMQ console
您正在以交易模式发送消息,但未提交交易。 Ack 模式 = 0 是 Session.TRANSACTED。您需要调用 session.commit() 以允许代理向主题传递消息,或者为您的用例选择不同的确认模式。
我在 java 中写了一个 Publisher class 以便通过主题发送消息。
package com.jms.jms_ps;
import java.util.Properties;
import javax.naming.*;
import javax.jms.*;
/**
*
* @author achref
*/
public class Publisher {
Context ctx;
TopicConnectionFactory connectionFactory;
Topic topic;
TopicConnection connection;
TopicSession session;
TopicPublisher publisher;
Publisher() throws NamingException{
Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
props.setProperty(Context.PROVIDER_URL, "tcp://localhost:61616");
ctx = new InitialContext(props);
connectionFactory = (TopicConnectionFactory) ctx.lookup("ConnectionFactory");
topic = (Topic) ctx.lookup("dynamicTopics/myTopic");
}
void sendTextMessage(String msg) throws JMSException{
connection = connectionFactory.createTopicConnection();
session = connection.createTopicSession(true, 0);
publisher = session.createPublisher(topic);
TextMessage message = session.createTextMessage();
message.setText(msg);
connection.start();
publisher.publish(message);
connection.close();
}
}
问题是每次我尝试发送消息时,它都没有添加到我的主题中(Messages Enqueued
等于零),因此订阅者什么也收不到。
ActiveMQ console
您正在以交易模式发送消息,但未提交交易。 Ack 模式 = 0 是 Session.TRANSACTED。您需要调用 session.commit() 以允许代理向主题传递消息,或者为您的用例选择不同的确认模式。