zoukankan      html  css  js  c++  java
  • Web项目容器集成ActiveMQ & SpringBoot整合ActiveMQ

      集成tomcat就是随项目启动而启动tomcat,最简单的方法就是监听器监听容器创建之后以Broker的方式启动ActiveMQ。

    1.web项目中Broker启动的方式进行集成

      在这里采用Listener监听ServletContext创建和销毁进行Broker的启动和销毁。

    0.需要的jar包:

    1.listener实现ServletContextListener接口

    package cn.qlq.listener;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    import org.apache.activemq.broker.BrokerService;
    
    public class ActiveMQListener implements ServletContextListener {
    
        private static final BrokerService brokerService = new BrokerService();
    
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            try {
                brokerService.stop();
                System.out.println("broker 停止");
            } catch (Exception e) {
    
            }
        }
    
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            try {
                brokerService.setUseJmx(true);
                brokerService.addConnector("tcp://localhost:61616");
                brokerService.start();
                System.out.println("broker 启动");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

    web.xml进行监听器的配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID" version="2.5">
        <display-name>MyWeb</display-name>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    
        <listener>
            <listener-class>cn.qlq.listener.ActiveMQListener</listener-class>
        </listener>
    
    </web-app>

    测试方法:向容器中发送和接收消息,成功证明整合成功。

    2.SpringBoot中以Broker方式启动ActiveMQ

    1.maven中增加如下配置:

            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-core</artifactId>
                <version>5.5.1</version>
            </dependency>

    2.编写Listener

    package cn.qlq.listener;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    import org.apache.activemq.broker.BrokerService;
    
    public class ActiveMQListener implements ServletContextListener {
        private static final BrokerService brokerService = new BrokerService();
    
        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            try {
                brokerService.stop();
                System.out.println("broker 停止");
            } catch (Exception e) {
    
            }
        }
    
        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            try {
                brokerService.setUseJmx(true);
                brokerService.addConnector("tcp://localhost:61616");
                brokerService.start();
                System.out.println("broker 启动");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    3.注册Listener到容器中:

    package cn.qlq.config;
    
    import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import cn.qlq.listener.ActiveMQListener;/**
     * 
     * @author Administrator
     *
     */
    @Configuration
    public class ListenerConfig {
        
        @Bean
        public ServletListenerRegistrationBean<ActiveMQListener> listenerRegist3() {
            ServletListenerRegistrationBean<ActiveMQListener> srb = new ServletListenerRegistrationBean<ActiveMQListener>();
            srb.setListener(new ActiveMQListener());
            return srb;
        }
    
    }

     测试方法:向容器中发送和接收消息,成功证明整合成功。

    3.SpringBoot整合ActiveMQ进行开发

     pom.xml

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

    application.properties增加activeMQ配置

    spring.activemq.brokerUrl=tcp://127.0.0.1:61616
    
    #spring.activemq.user=admin
    #spring.activemq.password=123456
    #spring.activemq.in-memory=true
    #spring.activemq.pool.enabled=false

    编写生产者代码:

    package cn.qlq.activemq;
    
    import javax.jms.Destination;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jms.core.JmsMessagingTemplate;
    import org.springframework.stereotype.Component;
    
    @Component("producer")
    public class Producer {
        // 也可以注入JmsTemplate,JmsMessagingTemplate对JmsTemplate进行了封装
        @Autowired
        private JmsMessagingTemplate jmsTemplate;
    
        // 发送消息,destination是发送到的队列,message是待发送的消息
        public void sendMessage(Destination destination, final String message) {
            jmsTemplate.convertAndSend(destination, message);
        }
    }

    消费者代码:

    package cn.qlq.activemq;
    
    import org.springframework.jms.annotation.JmsListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class Consumer {
    
        // 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
        @JmsListener(destination = "myQueue")
        public void receiveQueue(String text) {
            System.out.println("Consumer收到的报文为:" + text);
        }
    
    }

     测试代码:

    import javax.jms.Destination;
    
    import org.apache.activemq.command.ActiveMQQueue;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import cn.qlq.MySpringBootApplication;
    import cn.qlq.activemq.Producer;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = MySpringBootApplication.class)
    public class PlainTest {
        @Autowired
        private Producer producer;
    
        @Test
        public void contextLoads() throws InterruptedException {
            Destination destination = new ActiveMQQueue("myQueue");
    
            for (int i = 0; i < 5; i++) {
                producer.sendMessage(destination, "message" + i);
            }
        }
    }

      当然了这种方式也可以使用外部的ActiveMQ,也就是不用Broker方式启动ActiveMQ,以bat文件启动ActiveMQ之后整合方式同上。

      git地址:https://github.com/qiao-zhi/springboot-ssm.git 

  • 相关阅读:
    【林】Ubuntu下安装和设置 OpenSSH Server
    吐吐槽
    【不定时推荐】这些年读过的书第一本--《一个人的朝圣》
    source insight 和keil 编辑对齐
    WeifenLuo DockContent停靠窗口的大小设置
    指针无法保存值
    php 练习基础
    php 写日志
    数据库设计——字段类型设计
    .net用TreeView实现CheckBoxes全选 反选 子节选中 传值
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/10698218.html
Copyright © 2011-2022 走看看