包含许多发送消息的便捷方法。发送
方法使用对象等指定目标
在 JNDI 查找中使用 指定目标。方法
that takes no destination 参数使用默认目标。JmsTemplatejakarta.jms.DestinationStringsend
以下示例使用回调从
提供的对象:MessageCreatorSession
import jakarta.jms.ConnectionFactory;
import jakarta.jms.JMSException;
import jakarta.jms.Message;
import jakarta.jms.Queue;
import jakarta.jms.Session;
import org.springframework.jms.core.MessageCreator;
import org.springframework.jms.core.JmsTemplate;
public class JmsQueueSender {
private JmsTemplate jmsTemplate;
private Queue queue;
public void setConnectionFactory(ConnectionFactory cf) {
this.jmsTemplate = new JmsTemplate(cf);
}
public void setQueue(Queue queue) {
this.queue = queue;
}
public void simpleSend() {
this.jmsTemplate.send(this.queue, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("hello queue world");
}
});
}
}
在前面的示例中,通过传递对 .作为替代方案,提供了一个零参数构造函数,可用于构造实例
JavaBean 样式(使用或纯 Java 代码)。或者,考虑
派生自 Spring 的便利基类,该基类提供
用于 JMS 配置的预构建 Bean 属性。JmsTemplateConnectionFactoryconnectionFactoryBeanFactoryJmsGatewaySupport
该方法允许您发送一个
消息,使用目标的字符串名称。如果这些名称已在 JNDI 中注册,
应将模板的属性设置为 的实例。send(String destinationName, MessageCreator creator)destinationResolverJndiDestinationResolver
如果创建并指定了默认目标,则会向该目标发送消息。JmsTemplatesend(MessageCreator c)
使用消息转换器
为了方便发送域模型对象,具有
将 Java 对象作为消息数据参数的各种发送方法
内容。重载的方法和方法将转换过程委托给接口的实例。此接口定义了一个简单的协定,用于在 Java 对象和
JMS 消息。默认实现 () 支持转换
在 和 之间 、 和 和 和 之间。通过使用转换器,你和你的应用程序代码可以专注于
通过 JMS 发送或接收的业务对象,并且不关心
如何将其表示为 JMS 消息的详细信息。JmsTemplateconvertAndSend()receiveAndConvert()JmsTemplateMessageConverterSimpleMessageConverterStringTextMessagebyte[]BytesMessagejava.util.MapMapMessage
沙盒目前包括一个 ,它使用反射来转换
在 JavaBean 和 .您可能选择的其他常用实现选项
实现自己是使用现有 XML 封送包的转换器(例如
JAXB 或 XStream) 创建一个表示对象的对象。MapMessageConverterMapMessageTextMessage
适应不能
通常封装在转换器类中,接口
允许您在转换后但在发送邮件之前访问邮件。这
以下示例演示如何在将 A 转换为消息后修改消息头和属性:MessagePostProcessorjava.util.Map
public void sendWithConversion() {
Map map = new HashMap();
map.put("Name", "Mark");
map.put("Age", new Integer(47));
jmsTemplate.convertAndSend("testQueue", map, new MessagePostProcessor() {
public Message postProcessMessage(Message message) throws JMSException {
message.setIntProperty("AccountID", 1234);
message.setJMSCorrelationID("123-00001");
return message;
}
});
}
这将导致以下形式的消息:
MapMessage={
Header={
... standard headers ...
CorrelationID={123-00001}
}
Properties={
AccountID={Integer:1234}
}
Fields={
Name={String:Mark}
Age={Integer:47}
}
}
使用 和SessionCallbackProducerCallback
虽然发送操作涵盖了许多常见的使用方案,但有时可能会
想要对 JMS 或 .和 分别公开 JMS 和 / 对。运行中的方法
这些回调方法。SessionMessageProducerSessionCallbackProducerCallbackSessionSessionMessageProducerexecute()JmsTemplate