ActiveMQ消息中间件(集成spring与springboot)

---恢复内容开始---

spring集成ActiveMQ

1.相关依赖

      <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-jms</artifactId>
           <version>4.0.0.RELEASE</version>
       </dependency>
       <dependency>
           <groupId>org.apache.activemq</groupId>
           <artifactId>activemq-pool</artifactId>
           <version>5.7.0</version>
       </dependency>
       <dependency>
           <groupId>org.apache.activemq</groupId>
           <artifactId>activemq-core</artifactId>
           <version>5.7.0</version>
       </dependency>

2.相关配置

 <context:component-scan base-package="com.lhc.service"></context:component-scan>
   <!--和activeMQ集成的问题-->
   <!--创建连接工厂-->
   <bean id="amq" class="org.apache.activemq.ActiveMQConnectionFactory">
       <property name="password" value="admin"></property>
       <property name="userName" value="admin"></property>
       <property name="brokerURL" value="tcp://192.168.64.138:61616"></property>
   </bean>
<!--当前目的地为队列 如果使用发布订阅 则应修改为topic-->
   <bean id="queue" class="org.apache.activemq.command.ActiveMQQueue">
       <property name="physicalName" value="springQueue"></property>
   </bean>

   <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
       <property name="connectionFactory" ref="amq"></property>
       <property name="defaultDestination" ref="queue"></property>
       <!--是发布订阅还是点对点 默认false 为点对点-->
       <property name="pubSubDomain" value="false"></property>
   </bean>

3.生产者的开发


   @Autowired
   JmsTemplate jmsTemplate;

   public void send(final String msg) {
       jmsTemplate.send(new MessageCreator() {
           public Message createMessage(Session session) throws JMSException {
               TextMessage textMessage = session.createTextMessage();
               textMessage.setText(msg);
               return textMessage;
          }
      });
       //发送消息
  }

4.消费者的开发

 @Autowired
   JmsTemplate jmsTemplate;

   public String receive() {

       String text = null;
       try {
           TextMessage message = (TextMessage) jmsTemplate.receive();
           text = message.getText();
           System.out.println("this is consumer receive the text is------>" + text);
      } catch (JMSException e) {
           e.printStackTrace();
      }
       return text;
  }

5.现有开发中存在的问题

消费者需要手动启动,发送请求才能接受到消息,借助activeMQ的监听

1.声明消息监听器
public class ConsumerListener implements MessageListener {

   public void onMessage(Message message) {
       TextMessage textMessage = (TextMessage) message;
       try {
           String text = textMessage.getText();
           System.out.println(text);
      } catch (JMSException e) {
           e.printStackTrace();
      }
  }
}
2.将相关对象交由工厂管理
  <!--消息监听器-->
   <bean id="consumerListener" class="com.lhc.service.ConsumerListener"></bean>
   <!--消息监听容器-->
   <bean id="messageListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
       <property name="pubSubDomain" value="false"></property>
       <property name="destination" ref="queue"></property>
       <property name="messageListener" ref="consumerListener"></property>
       <property name="connectionFactory" ref="amq"></property>
   </bean>

springboot集成ActiveMQ

1.相关依赖

      <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-activemq</artifactId>
       </dependency>
       <dependency>
           <groupId>org.apache.activemq</groupId>
           <artifactId>activemq-pool</artifactId>
       </dependency>

2.生产者


@Component
public class Product {
   @Autowired
   JmsTemplate jmsTemplate;

   public void sendMessage(String message) {
       Destination destination = new ActiveMQQueue("springboot-queue");
       this.jmsTemplate.convertAndSend(destination, message);
  }

}

3.消费者

@Component
public class Consumer {
   @JmsListener(destination = "springboot-queue")
   public void receiveQueue(TextMessage msg) {
       try {
           System.out.println(msg.getText());
      } catch (JMSException e) {
           e.printStackTrace();
      }
  }
}

4.配置文件

spring.activemq.broker-url=tcp://192.168.64.138:61616
spring.activemq.password=admin
spring.activemq.user=admin

---恢复内容结束---

原文地址:https://www.cnblogs.com/lhc-hhh/p/10280726.html