Spring模板类常见的设计原则是提供 helper methods to perform common operations 以及更复杂的用法, delegate the essence of the processing task to user implemented callback interfaces.
在JMS Connection中将从工厂获得
=>从创建的连接会话中,视图是一个工作单元,它还提供事务
=>从会话中创建不同类型的JMS消息,如TextMessage,ObjectMessage,MapMessage,BytesMessage和StreamMessage,方法如下:session.createTextMessage(“hello queue world”); session.createObjectMessage(someSerializedObject)等
=>同一会话还负责创建MessageProducer session.createProducer(destination)和MessageConsumer session.createConsumer(destination)的实例
您有以下convertAndSend可能性(重载方法):
jmsTemplate.convertAndSend(message)
jmsTemplate.convertAndSend(destination, message)
jmsTemplate.convertAndSend(message, postProcessor)
jmsTemplate.convertAndSend(destinationName, message)
jmsTemplate.convertAndSend(destination, message, postProcessor)
jmsTemplate.convertAndSend(destinationName, message, postProcessor)
What is happening? 回调的基本用法,如第3和第5签名,您可以在通过已配置的MessageConverter将对象转换为JMS消息后更改消息 . 你看到一个实际的目的地要由DestinationResolver在6日的情况下解决,你没有传递它,它将从JNDI解析,如果它在那里注册 .
What does it mean?
jmsTemplate.send(this.queue, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("hello queue world");
}
});
在这个示例中,您将看到JMS模板的send()方法,您正在提供匿名实现(回调),其中该方法允许您访问会话对象,并从该会话创建自定义的session.createTextMessage(“hello queue world”)信息 .
convertAndSend中的相同方式(您可以访问要修改的后处理器)
public void ConvertSend() {
Map map = new HashMap();
map.put("Name", "Vimal");
map.put("Age", new Integer(45));
jmsTemplate.convertAndSend("jmsQueue", map, new MessagePostProcessor() {
public Message postProcessMessage(Message message) throws JMSException {
message.setIntProperty("ID", 9999);
message.setJMSCorrelationID("123-99999");
return message;
}
});
}
消息对象已创建但您正在修改它(除了名称和年龄之外还添加了两个属性) . MessagePostProcessor接口允许您在转换消息之后但在发送之前访问消息 .
In other words! 消息属性, Headers 和正文的设置无法封装在转换器类(SimpleMessageConverter)中,但MessagePostProcessor接口允许您在转换后但在发送之前访问消息 .