spring boot(学习笔记第十七课)

spring boot(学习笔记第十七课)

  • Spring boot的Apache ActiveMQ

学习内容:

  • Spring boot的Apache ActiveMQ

1. Spring boot的Apache ActiveMQ

  1. 什么是JMS(Java Message Service)
    JMS(Java Message Service)就是Java消息服务,它统一了JavaAPI标准,多个客户端都可以通过JMS(Java Message Service)进行连接交互,JMS(Java Message Service)提供两种模式:
    * 点对点模式
    * 发布者/订阅者模式
    在这里插入图片描述

  2. 安装Apache ActiveMQ

    • Apache ActiveMQ是AMS服务的一个实现,这里尝试使用点对点模式。
    • 这里使用centos下进行安装,首先保证Java
      [root@master bin]# java -version
      openjdk version "1.8.0_412"
      OpenJDK Runtime Environment (build 1.8.0_412-b08)
      OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)
      
      如果centos上没有Java,事前安装。
      yum install java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
      
      设置JAVA_HOME
      vim ~/.bashrc
      export PATH=$PATH:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre
      
    • 继续下载Apache ActiveMQ
      这里Java的版本是Java 8,所以最高的支持版本就是5.16.3
      Apache ActiveMQ 5.16.3
    • 使用root账号进行解压缩,以及安装。
      例如,使用/root/activemq进行安装。
      tar zxvf /root/activemq/apache-activemq-5.16.3-bin.tar.gz
      
    • 修改conf/jetty.xml
      这里如果不修改,windows将不会连接上ActiveMQ
      vim /root/activemq/apache-activemq-5.16.3/conf/jetty.xml
      
      jetty.xml为如下位置需要修改。这里127.0.0.1修改为0.0.0.0
      <bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
      	<!-- the default port number for the web console -->
      	<property name="host" value="0.0.0.0"/>
      	<property name="port" value="8161"/>
      </bean>
      
    • 启动ActiveMQ
      cd /root/activemq/apache-activemq-5.16.3/bin
      ./activemq start
      
    • 检查ActiveMQ的默认端口8161监听状况
       netstat -tuln |grep 8161
      
      发现有进程在监听,说明启动正常。
    • windows进行测试。
      使用http://IP地址:8161进行连接,默认的用户名和密码都是admin
      在这里插入图片描述
  3. 配置Spring bootweb应用进行消息的发送。

    • 增加ActiveMQ的依赖
        <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
      
    • 配置指向ActiveMQ server的连接
      spring.activemq.broker-url=tcp://192.168.12.132:61616
      spring.activemq.user=admin
      spring.activemq.password=admin
      spring.activemq.packages.trusted=com.example.demo.entity,java.util
      
      注意spring.activemq.packages.trusted这里特别重要,需要指定传递的可信任自定义Message class所在的package
      其他的设定都是连接ActiveMQ的连接信息。
    • 创建ActiveMQQueue
      public class DemoApplication {
      
      	public static void main(String[] args) {
      		SpringApplication.run(DemoApplication.class, args);
      	}
      
      	@Bean
      	Queue queue(){
      		return new ActiveMQQueue("amq");
      	}
      }
      
  4. 配置Spring bootweb应用进行消息的监听。

    @Component
    public class JmsComponent {
        @Autowired
        JmsMessagingTemplate jmsMessagingTemplate;
    
        @Autowired
        Queue queue;
    
        @JmsListener(destination = "amq")
        public void receive(Message message){
            System.out.println("receiving:" + message);
        }
    }
    
  5. 配置Message类。

    @Data
    public class Message implements Serializable {
        private String name;
        private String content;
        private Date date;
    }
    

    注意:

    • 这里必须实现Serializable接口
    • application.properties里面,必须设定信任的message类所在的package,spring.activemq.packages.trusted=com.example.demo.entity,java.util
    • 这里,指定了com.example.demo.entity的基础上,还需要指定内部成员变量类型java.util.date

    至此位置,接收端(consumer)可以接收到queue(amq)发送过来的message

  6. 配置发送端

    @Controller
    public class ActiveMQController {
       @Autowired
       JmsMessagingTemplate jmsMessagingTemplate;
    
       @Autowired
       Queue queue;
       @GetMapping("/sendJms")
       @ResponseBody
       public String sendJmsMessage(){
           Message message = new Message();
           message.setContent("hello,ativemq");
           message.setDate(new Date());
           message.setName("greet");
           jmsMessagingTemplate.convertAndSend(queue,message);
           return "OK";
       }
    }
    
  7. 启动发送端(producer)
    使用intellJ启动web server作为producer进行消息发送。使用端口8080在这里插入图片描述

  8. 启动接收端(consumer)

    • 将应用程序进行mvn package,进行打包jar包。
      正常的情况下发送端应用程序和接收端应用程序应该是两个spring boot的应用程序,这里为了方便,写在一起,但是启动的时候分别是8080端口(发送端)和9090端口(接收端) 在这里插入图片描述
      使用git bashjava命令,启动web server作为producer进行消息发送。使用端口9090
      在这里插入图片描述
      java -jar demo-0.0.1-SNAPSHOT.jar --server.port=9090
  9. 利用get请求进行发送message
    在这里插入图片描述

  10. 查看接收端控制台,对message接收情况进行检查
    在这里插入图片描述

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值