JMS简介

来源:互联网 发布:java 线程池 串行 编辑:程序博客网 时间:2024/06/15 19:48

在JMS中有两种的消息模式:

  • 队列的点对点消息模式:既是每一个消息都有一个发送者有一个或者多个接收者,当消息代理得到消息时,它将消息放入一个队列中。当接收者请求队列中的下一条消息时,消息会从队列中取出投递给接收者。因为消息投递后会从队列中删除,这样就可以保证消息只能投递给一个接收者。这里的接收者谁会接收到消息是随机的。
  • 发布-订阅消息模式:与队列类似,多个接收者都可以监听一个主题,但是这里消息不再是只投递给一个接收者,所有的接收者都会接受到消息。
创建链接工厂
  1. <!-- 创建JMS链接工厂 -->
  2. <bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
  3. <!-- MQ地址 -->
  4. <property name="brokerURL" value="tcp://192.168.1.24:61616"/>
  5. </bean>
装配JMS模板:
  1. <!-- spring的jms模板 设置消息发送的默认目的地 -->
  2. <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
  3. <!-- spring的jms模板 -->
  4. <property name="connectionFactory" ref="connectionFactory"></property>
  5. <!-- 设置消息发送的默认目的地 -->
  6. <property name="defaultDestinationName" value="spittle.alert.queue"/>
  7. <!-- 设置消息队列模式(队列和订阅模式) -->
  8. <property name="pubSubDomain" value="false"/>
  9. </bean>
注入jms模板:
  1. <!-- 发送的bean -->
  2. <bean id="send" class="F">
  3. <property name="jmsTemplate" ref="jmsTemplate"/>
  4. </bean>
  5. <!-- 接收的bean -->
  6. <bean id="receive1" class="J">
  7. <property name="jmsTemplate" ref="jmsTemplate"/>
  8. </bean>
  9. </pre>
发送的类
  1. import org.springframework.jms.core.JmsTemplate;
  2. import org.springframework.jms.core.MessageCreator;
  3. import javax.jms.JMSException;
  4. import javax.jms.Message;
  5. import javax.jms.Session;
  6. /**
  7. * Created by 胥源博 on 2016/7/27.
  8. */
  9. public class F implements AlertService {
  10. JmsTemplate jmsTemplate;//注入JMS模板
  11. public void setJmsTemplate(JmsTemplate jmsTemplate) {
  12. this.jmsTemplate = jmsTemplate;
  13. }
  14. //JmsTemplate的send()方法调用时,JmsTemplate将负责获得JMS连接,会话并代表发送者发送消息。
  15. public void sendSpilttleAlert(final UserBean userBean) {//发送消息
  16. //第一个参数是JMS目的地的地名,标识消息发送给谁(这个参数不写就走xml文档里面配置的默认路径)
  17. jmsTemplate.send(
  18. "spittle.alert.queue",
  19. new MessageCreator() {//创建消息
  20. public Message createMessage(Session session) throws JMSException {
  21. return session.createObjectMessage(userBean);
  22. }
  23. }
  24. );
  25. }
  26. }
接受的类:
  1. import org.springframework.jms.support.JmsUtils;
  2. import javax.jms.JMSException;
  3. import javax.jms.ObjectMessage;
  4. /**
  5. * Created by 胥源博 on 2016/7/27.
  6. */
  7. public class J {
  8. JmsTemplate jmsTemplate;
  9. public void setJmsTemplate(JmsTemplate jmsTemplate) {
  10. this.jmsTemplate = jmsTemplate;
  11. }
  12. public UserBean getF() {
  13. try {
  14. ObjectMessage objectMessage = (ObjectMessage) jmsTemplate.receive();//接收消息
  15. return (UserBean) objectMessage.getObject();//获取对象
  16. } catch (JMSException e) {
  17. throw JmsUtils.convertJmsAccessException(e);
  18. }
  19. }
  20. }
上述步骤:
  • 创建JMS链接工厂(设置MQ地址)。
  • 使用spring的JMS模版,注入链接工厂。消息的默认目的地,和模式(队列还是订阅)。
  • 声明接收和发送的bean并注入JMS模板。