我想发布消息,我正在为其编写一个 JMS 应用程序,该应用程序会将消息发布到 Tibco EMS 队列。有两个队列,一个用于正常日志记录,另一个用于异常日志记录。现在如何将消息发送到 JMS 中的两个不同队列。谁能帮我解决这个问题,因为它非常关键?
问问题
567 次
2 回答
0
将消息发送到队列的非常基本的 JMS API 代码如下所示。您需要根据您的环境调整连接工厂以及队列名称。还需要调整初始上下文设置。
void sendMessage() {
Connection con = null;
try {
// Get the initial context
Hashtable<String, String> hTable = new Hashtable<String, String>();
hTable.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
hTable.put(Context.PROVIDER_URL, "t3://localhost:7001");
Context ctx = new InitialContext(hTable);
// Create ConnectionFactory
ConnectionFactory cf = (ConnectionFactory) ctx.lookup("JMS-JNDI-ConFactory");
// Create connection
con = cf.createConnection();
// Create Non transacted Session with auto ack
Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Create the destination
Queue queue = (Queue) ctx.lookup("JMS-JNDI-Queue");
// Create MessageProducer for the destination
MessageProducer producer = session.createProducer(queue);
// Create empty Message with header and properties only
TextMessage message = session.createTextMessage();
// set the message body
message.setText("Message-1");
// Send the message
producer.send(message);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (con != null) {
try {
con.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
于 2017-11-16T13:43:05.943 回答
0
这是一个古老的话题,但也许它可以提供帮助。
要将消息发送到 JMS 队列实际上需要以下内容:
Context context = null;
QueueConnection queueConnection = null;
QueueSession queueSession = null;
Queue queue;
这就是它的工作原理:
context = getContext(host, port, user, password);
queueConnection = getConnectionFactory(context, connectionFactoryJndi);
queueSession = getQueueSession(queueConnection);
queue = getQueue(context, queueJndi);
// send a text message
queueConnection.start();
String message = "hello";
sendMessageToQueue(verbose, message, queueSession, queue);
queueConnection.stop();
要获取您需要连接到服务器的上下文:
private Context getContext(String host, int port, String user, String password) throws NamingException {
String url = String.format("%s://%s:%d", protocol, host, port);
Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory);
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_PRINCIPAL, user);
env.put(Context.SECURITY_CREDENTIALS, password);
return new InitialContext(env);
}
获取连接工厂:
private QueueConnection getConnectionFactory(Context context, String jndiName)
throws NamingException, JMSException {
QueueConnectionFactory connectionFactory = (QueueConnectionFactory) context.lookup(jndiName);
return connectionFactory.createQueueConnection();
}
打开队列会话:
private QueueSession getQueueSession(QueueConnection queueConnection) throws JMSException {
return queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
}
获取队列:
private Queue getQueue(Context context, String jndiName) throws NamingException {
return (Queue) context.lookup(jndiName);
}
最后,将您的消息发送到队列:
私有静态无效 sendMessageToQueue(布尔详细,字符串消息,QueueSession queueSession,队列队列)抛出 JMSException {
TextMessage textMessage = queueSession.createTextMessage(message);
try (QueueSender queueSender = queueSession.createSender(queue)) {
queueSender.send(textMessage);
}
}
这些代码片段来自这里:https ://github.com/zappee/jms-message-sender 这是一个 JMS 发送器命令行工具,你可以以这个项目为例。
希望它有所帮助。
于 2021-02-09T14:18:54.327 回答