6.2. 发送消息
这个示例首先创建一个 JNDI Context
,使用它查找 ConnectionFactory
和 Destination
,使用工厂创建并启动 Connection
,然后创建一个 Session
。然后,MessageProducer
为 Destination
创建,并使用它发送信息。然后 Connection
被关闭,程序会退出。
这个 Sender
示例的可运行变体位于 <source-dir>/qpid-jms-examples
目录中,以及之前在 第 3 章 入门 中的 Hello World 示例。
示例:发送消息
package org.jboss.amq.example; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.ExceptionListener; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; public class Sender { public static void main(String[] args) throws Exception { try { Context context = new InitialContext(); 1 ConnectionFactory factory = (ConnectionFactory) context.lookup("myFactoryLookup"); Destination destination = (Destination) context.lookup("myDestinationLookup"); 2 Connection connection = factory.createConnection("<username>", "<password>"); connection.setExceptionListener(new MyExceptionListener()); connection.start(); 3 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 4 MessageProducer messageProducer = session.createProducer(destination); 5 TextMessage message = session.createTextMessage("Message Text!"); 6 messageProducer.send(message, DeliveryMode.NON_PERSISTENT, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE); 7 connection.close(); 8 } catch (Exception exp) { System.out.println("Caught exception, exiting."); exp.printStackTrace(System.out); System.exit(1); } } private static class MyExceptionListener implements ExceptionListener { @Override public void onException(JMSException exception) { System.out.println("Connection ExceptionListener fired, exiting."); exception.printStackTrace(System.out); System.exit(1); } } }
- 1
- 2
- ConnectionFactory 和 Destination 对象使用它们的查找名称从 JNDI 上下文检索。
- 3
- 该工厂用于创建
Connection
,然后注册ExceptionListener
,然后启动。创建连接时提供的凭据通常从适当的外部配置源获取,确保它们与应用本身保持独立,并可独立更新。 - 4
- 在
Connection
上创建一个未翻译的、自动确认的Session
。 - 5
MessageProducer
创建用于发送信息到Destination
。- 6
- 使用给定内容创建一个
TextMessage
。 - 7
- 发送
TextMessage
。它将以非持久性方式发送,具有默认优先级且没有过期。 - 8
Connection
已关闭。Session
和MessageProducer
隐式关闭。
请注意,这只是一个示例。现实应用通常会使用长期存在的 MessageProducer,并随着时间推移发送多个消息。打开并关闭每个信息 Connection
、Session
和 MessageProducer
通常不高效。