消息队列activemq的使用

消息队列activemq的使用

一、在linux上安装

  • 解压缩安装包

  • 在bin目录下使用启动命令

    ./activemq start
    
  • activemq有两个默认的端口

    • 8161端口:后台的管理页面端口
    • 61616:服务接口
  • 用户名和密码都是admin

二、spring整合使用jms

1、点对点模式

  • 消息生产者

    • 导入相关的依赖

      <dependencies>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-jms</artifactId>
              <version>4.1.5.RELEASE</version>
          </dependency>
          <dependency>
              <groupId>org.apache.activemq</groupId>
              <artifactId>activemq-client</artifactId>
              <version>5.14.5</version>
          </dependency>
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.12</version>
          </dependency>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-test</artifactId>
              <version>4.1.5.RELEASE</version>
          </dependency>
          <dependency>
              <groupId>log4j</groupId>
              <artifactId>log4j</artifactId>
              <version>1.2.17</version>
          </dependency>
      
      </dependencies>
      
    • 创建spring的配置文件applicationContext-jms-producer.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
             xmlns:context="http://www.springframework.org/schema/context"       
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        
              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">	
          <!--生产者实现类的包扫描-->
          <context:component-scan base-package=""></context:component-scan>
          
          <!--activemq服务的地址-->
          <bean id="targetConnectionFactory" 			class="org.apache.activemq.ActiveMQConnectionFactory">  
      	    <property name="brokerURL" value="tcp://192.168.188.130:61616"/>  
      	</bean>
          
          <!--spring的整合服务连接-->
          <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">  
      	<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->  
      	    <property name="targetConnectionFactory" ref="targetConnectionFactory"/>  
      	</bean> 
          
          <!--spring提供的JMS工具模板-->
          <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
      	
          <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 --> 
      	    <property name="connectionFactory" ref="connectionFactory"/>  
      	</bean> 
          
          <!--消息队列-->
          <bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">  
      	    <constructor-arg value="queue_text"/>  
      	</bean>    
          
      </beans>
      
    • 生产者实现类

      @Component
      public class QueueProducer {
      	
      	@Autowired
      	private JmsTemplate jmsTemplate;
      	
      	@Autowired
      	private Destination queueTextDestination;
      	
      	/**
      	 * 发送文本消息
      	 * @param text
      	 */
      	public void sendTextMessage(final String text){
      		jmsTemplate.send(queueTextDestination, new MessageCreator() {			
      			public Message createMessage(Session session) throws JMSException {
      				return session.createTextMessage(text);
      			}
      		});		
      	}
      }
      
  • 消息消费者

    • 导入生产者相同的依赖

    • 创建spring配置文件applicationContext-jms-consumer-queue.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
      	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      	xmlns:p="http://www.springframework.org/schema/p"
      	xmlns:context="http://www.springframework.org/schema/context"
      	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
          
          <!--jms服务的链接-->
          <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">  
      	    <property name="brokerURL" value="tcp://192.168.188.130:61616"/>  
      	</bean>	  
          
          <!--spring整合的连接-->
          <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">  
      	<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->  
      	    <property name="targetConnectionFactory" ref="targetConnectionFactory"/>  
      	</bean>  
          
          <!--获取消息的队列-->
          <bean id="queueTextDestination" class="org.apache.activemq.command.ActiveMQQueue">  
      	    <constructora-rg value="queue_text"/>  
      	</bean>  
          
          <!--监听器-->
          <bean id="myMessageListener" class="自己实现MessgeListenser"></bean>
          
          <!--消息容器-->
          <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
      		<property name="connectionFactory" ref="connectionFactory" />
      		<property name="destination" ref="queueTextDestination" />
      		<property name="messageListener" ref="myMessageListener" />
      	</bean>
      </beans>
      
    • 监听器实现类

      public class MyMessageListener implements MessageListener {
      	public void onMessage(Message message) {
      	TextMessage textMessage=(TextMessage)message;		
      		try {
      			System.out.println("接收到消息:"+textMessage.getText());
      		} catch (JMSException e) {
      			e.printStackTrace();
      		}
      	}
      }
      

2、发表订阅模式

  • 发布者

    • applicationContext-jms-producer.xml增加配置

      <!--发布者topic-->
      <bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">  
          <constructor-arg value="topic_text"/>  
      </bean>  
      
    • 实现类

      @Component
      public class TopicProducer {
      	@Autowired
      	private JmsTemplate jmsTemplate;
      	
      	@Autowired
      	private Destination topicTextDestination;
      	
      	/**
      	 * 发送文本消息
      	 * @param text
      	 */
      	public void sendTextMessage(final String text){
      		jmsTemplate.send(topicTextDestination, new MessageCreator() {			
      			public Message createMessage(Session session) throws JMSException {
      				return session.createTextMessage(text);
      			}
      		});		
      	}
      }
      
  • 订阅者

    • 在applicationContext-jms-consumer-topic.xml中添加配置

      <!--这个是队列目的地,点对点的  文本信息-->  
      <bean id="topicTextDestination" class="org.apache.activemq.command.ActiveMQTopic">  
          <constructor-arg value="topic_text"/>  
      </bean>    
      <!-- 消息监听容器 -->
      <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
          <property name="connectionFactory" ref="connectionFactory" />
          <property name="destination" ref="topicTextDestination" />
          <property name="messageListener" ref="myMessageListener" />
      </bean>
      
    • 监听实现类

      public class MyMessageListener implements MessageListener {
      	public void onMessage(Message message) {
      	TextMessage textMessage=(TextMessage)message;		
      		try {
      			System.out.println("接收到消息:"+textMessage.getText());
      		} catch (JMSException e) {
      			e.printStackTrace();
      		}
      	}
      }
      
      
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值