Spring之JMS之发送消息
来源:互联网 发布:grpc golang用法 编辑:程序博客网 时间:2024/04/29 05:45
JmsTemplate
包含了许多方法发送消息。有一些发送方法,其指定了目的地,使用了一个javax.jms.Destination
对象并且还有那些使用一个String作为参数,需要JNDI查询。没有指定目的的发送方法使用默认的目的。下面是一个例子,发送消息到一个队列中。
import javax.jms.ConnectionFactory;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Queue;import javax.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"); } }); }}
这个例子使用MessageCreator
回调从支持的Session对象中创建文本消息。JmsTemplate
通过传递ConnectionFactory
的引用构建。另外可选地,提供一个缺省的构造器和connectionFactory
并可用于构建JavaBean类型的实例(使用一个BeanFactory或者POJO)。另外,考虑Spring的JmsGatewaySupport
提供的基类,为JMS配置提供了预先内置的bean属性。
send(String destinationName, MessageCreator creator)
方法让你使用目的的名字发送一条消息。如果这些名字在JNDI中注册,你需要给JndiDestinationResolver
的实例设置这个模板的destinationResolver
属性。
如果你创建了JmsTemplate
并且指定了默认的目的,send(MessageCreator c)
发送消息到目的地。
23.3.1 使用消息转换器
为方便发送领域模型对象,JmsTemplate
有不同的发送方法,其针对一个消息的数据内容,以一个Java 对象作为参数。JmsTemplate
中重载的方法convertAndSend()
和receiveAndConvert()
将处理委派给MessageConverter
接口的一个实例。接口定义了一个简单的协议在Java 对象和JMS消息之间进行转换。默认的实现SimpleMessageConverter
支持String
,TextMessage
,byte[]
和BytesMesssage
,java.util.Map
和MapMessage
之间的转换。通过使用这个转化器,你和你的应用程序代码可以专心处理要发送的业务对象或者借助JMS接受的业务对象,而不必关注那些作为一个JMS消息如何如何表示的细节。
包含了MapMessageConverter
的沙箱,使用反射在JavaBean和MapMessage
之间进行转换。其他你可以自己实现的是转换器,其使用了一个已存在的XML组成的包,比如JAXB,Castor,XMLBeans,或者XStream,来创建表示对象的TextMessage
。
为调整消息属性的设置,消息头和主体,不能封装到一个转换器类内部,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}}}
23.3.2 SessionCallback和ProducerCallback
发送方法囊括了大多数通用的使用场景,也有这些场景,你想在一个JMS的会话或MessageProducer
执行多个操作。SessionCallback
和ProducerCallback分别
暴露JMS会话和成对的Session
/MessageProducer
。JmsTemplate
上的execute
()方法执行这些回调方法。
- Spring之JMS之发送消息
- Spring之JMS之发送消息
- spring消息之使用jms发送和接收消息
- Spring消息(1)之 JMS
- Spring之JMS之消息监听容器
- Spring之JMS之接受消息
- Spring之JMS之接受消息
- Spring之JMS之接受消息
- JMS之Spring +activeMQ实现消息队列
- spring---消息订阅发布之JMS
- Spring + ActiveMQ实现jms发送消息
- Spring + ActiveMQ实现jms发送消息
- spring interation学习-01发送jms消息
- Spring + ActiveMQ兑现jms发送消息
- Spring + ActiveMQ兑现jms发送消息
- spring整合JMS之异步消息监听机制
- java消息中间件之二:spring集成JMS连接ActiveMQ
- Spring之JMS
- iOS Xcode 模拟器键盘不显示(不弹出)
- 大保洁-家政o2o平台
- typedef和define具体的详细区别
- 钻石语法
- Netty线程模型
- Spring之JMS之发送消息
- 第十三周 项目六--体验文件操作(3-实战)
- 设备树使用手册
- 持续集成_ 产品级
- Google Cloud Messaging (Android 消息推送技术) (三)接口测试
- 活动图与流程图的区别
- Python:Scrapy中重写ImagePipeline组件的file_path函数,自定义图片的路径和名称
- iOS app store审核规则汇总,你会被拒吗?
- memcached 源码阅读笔记