发送 JMS 消息
简单的使用默认destination
1 | import javax.jms.ConnectionFactory; |
Message Converters
Message Converters 提供Java 对象 message‘s 数据间的转换。Spring的默认实现 SimpleMessageConverter 可以支持String 和 TextMessage, byte[] 和 BytesMesssage, java.util.Map 和 MapMessage 之间的转换。
下面是个Map的发送:
1 | public void sendWithConversion() { |
SessionCallback 回调和 ProducerCallback 回调
接收 JMS 消息
同步接收 Synchronous
同步接收 JMS 消息会堵塞, 可设置 receiveTimeout
。
异步接收 Asynchronous - Message-Driven POJOs
类似于 EJB 里的 Message-Driven Bean (MDB) ,Spring 定义了 Message-Driven POJO (MDP) 来作为 JMS 的接收者。
一个 Message-Driven POJO (MDP) 必须实现 javax.jms.MessageListener
(或者 MessageListenerAdapter, SessionAwareMessageListener),而且必须是线程安全,它会被多线程调用。
MDP的一个例子:
1 | import javax.jms.JMSException; |
对应的配置
1 | <!-- this is the Message Driven POJO (MDP) --> |
事务 transaction
本地事务只需要简单配置 sessionTransacted
就可以激活。发送响应是该本地事务的一部分,但其他所有资源(如数据库操作)的操作都是独立的。
1 | <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> |
分布式事务
1 | <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/> |
注解驱动的监听端点
@JmsListener
开启监听端点 注解
在@Configuration
类中加入@EnableJms
来使@JmsListener
生效。
1 | @Configuration |
注册监听端点
1 | @Configuration |
端点方法 签名
1 | @Component |
响应管理
@SendTo
1 | @JmsListener(destination = "myDestination") |
运行时响应destination
1 | @JmsListener(destination = "myDestination") |