包含许多发送消息的便捷方法。发送
方法使用对象等指定目标
在 JNDI 查找中使用 指定目标。方法
that takes no destination 参数使用默认目标。JmsTemplate
jakarta.jms.Destination
String
send
以下示例使用回调从
提供的对象:MessageCreator
Session
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 属性。JmsTemplate
ConnectionFactory
connectionFactory
BeanFactory
JmsGatewaySupport
该方法允许您发送一个
消息,使用目标的字符串名称。如果这些名称已在 JNDI 中注册,
应将模板的属性设置为 的实例。send(String destinationName, MessageCreator creator)
destinationResolver
JndiDestinationResolver
如果创建并指定了默认目标,则会向该目标发送消息。JmsTemplate
send(MessageCreator c)
使用消息转换器
为了方便发送域模型对象,具有
将 Java 对象作为消息数据参数的各种发送方法
内容。重载的方法和方法将转换过程委托给接口的实例。此接口定义了一个简单的协定,用于在 Java 对象和
JMS 消息。默认实现 () 支持转换
在 和 之间 、 和 和 和 之间。通过使用转换器,你和你的应用程序代码可以专注于
通过 JMS 发送或接收的业务对象,并且不关心
如何将其表示为 JMS 消息的详细信息。JmsTemplate
convertAndSend()
receiveAndConvert()
JmsTemplate
MessageConverter
SimpleMessageConverter
String
TextMessage
byte[]
BytesMessage
java.util.Map
MapMessage
沙盒目前包括一个 ,它使用反射来转换
在 JavaBean 和 .您可能选择的其他常用实现选项
实现自己是使用现有 XML 封送包的转换器(例如
JAXB 或 XStream) 创建一个表示对象的对象。MapMessageConverter
MapMessage
TextMessage
适应不能
通常封装在转换器类中,接口
允许您在转换后但在发送邮件之前访问邮件。这
以下示例演示如何在将 A 转换为消息后修改消息头和属性:MessagePostProcessor
java.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} } }
使用 和SessionCallback
ProducerCallback
虽然发送操作涵盖了许多常见的使用方案,但有时可能会
想要对 JMS 或 .和 分别公开 JMS 和 / 对。运行中的方法
这些回调方法。Session
MessageProducer
SessionCallback
ProducerCallback
Session
Session
MessageProducer
execute()
JmsTemplate