对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
发送消息
这包含许多发送消息的便捷方法。发送
methods 使用对象指定目的地,其他
通过在 JNDI 查找中使用 来指定目标。方法
,则不设 destination 参数使用默认 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");
}
});
}
}
在前面的示例中, the 是通过传递对 .作为替代方案,提供了一个零参数构造函数 and,可用于在
JavaBean 样式(使用或纯 Java 代码)。或者,考虑
派生自 Spring 的 convenience 基类,该基类提供
用于 JMS 配置的预构建 Bean 属性。JmsTemplate
ConnectionFactory
connectionFactory
BeanFactory
JmsGatewaySupport
该方法允许您发送
message 使用目标的字符串名称。如果这些名称已在 JNDI 中注册,则
您应该将模板的属性设置为 .send(String destinationName, MessageCreator creator)
destinationResolver
JndiDestinationResolver
如果您创建并指定了默认目标,则会向该目标发送消息。JmsTemplate
send(MessageCreator c)
使用消息转换器
为了方便发送域模型对象,具有
各种 send 方法,这些方法将 Java 对象作为消息数据的参数
内容。中的重载方法和方法将转换过程委托给接口的实例。此接口定义了一个简单的协定,用于在 Java 对象和
JMS 消息。默认实现 () 支持转换
介于 和 、 和 、 和 之间。通过使用转换器,您和您的应用程序代码可以专注于
业务对象,而不关心
有关如何将其表示为 JMS 消息的详细信息。JmsTemplate
convertAndSend()
receiveAndConvert()
JmsTemplate
MessageConverter
SimpleMessageConverter
String
TextMessage
byte[]
BytesMessage
java.util.Map
MapMessage
沙箱当前包括一个 ,它使用反射来转换
在 JavaBean 和 .您可能的其他常用实施选择
实现自己的方法是使用现有 XML 封送包(例如
JAXB 或 XStream)创建表示对象的 API。MapMessageConverter
MapMessage
TextMessage
为了适应消息的属性、标头和正文的设置,这些设置不能是
通常封装在 Converter 类中,接口
允许您在消息转换之后但在发送之前访问消息。这
以下示例演示如何在将 a 转换为 Message 后修改 Message 标头和属性: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
虽然 send 操作涵盖了许多常见的使用场景,但有时您可能会
想要对 JMS 执行多个操作或 .和 分别公开 JMS 和 / 对。运行的方法
这些回调方法。Session
MessageProducer
SessionCallback
ProducerCallback
Session
Session
MessageProducer
execute()
JmsTemplate