RabbitMQ学习笔记 04、Springboot集成RabbitMQ

简介: RabbitMQ学习笔记 04、Springboot集成RabbitMQ

springboot继承rabbitmq实操



生产者服务


此时我们通过使用springboot来快速搭建一个生产者服务


step1:引入依赖以及配置rabbitmq


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>


application.yml


server:
  port: 8080
spring:
  application:
    name: producter
  rabbitmq:
    addresses: 192.168.118.128:5672
    username: admin
    password: password
    virtual-host: /
    connection-timeout: 15000


注意:对应的rabbitmq服务默认是跑在5672端口的,千万不要填15672,其是管理后台的端口号!!!



step2:定义队列、交换机以及绑定的routingkey


说明:该配置就相当于我们之前案例中在消费者的配置操作!!!



TopicRabbitConfig.java


import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @ClassName TopicRabbitConfig
 * @Author ChangLu
 * @Date 2021/9/25 13:37
 * @Description Topic类型交换机配置
 */
@Configuration
public class TopicRabbitConfig {
    //配置队列
    @Bean
    public Queue queue1(){
        return new Queue("queue1");
    }
    @Bean
    public Queue queue2(){
        return new Queue("queue2");
    }
    //配置交换机
    @Bean
    public TopicExchange exchange(){
        return new TopicExchange("bootExchange");
    }
    //绑定队列到交换机并且执行routingkey,之后指定消费者即可通过指定队列来拿到信息
    @Bean
    public Binding bindingExchangeMessage1(Queue queue1,TopicExchange exchange){
        return BindingBuilder.bind(queue1).to(exchange).with("cat.red");
    }
    @Bean
    public Binding bindingExchangeMessage2(Queue queue2,TopicExchange exchange){
        return BindingBuilder.bind(queue2).to(exchange).with("*.red");
    }
}



step3:编写发送方法并添加测试方法


MsgSender.java
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * @ClassName MsgSender
 * @Author ChangLu
 * @Date 2021/9/25 13:42
 * @Description 发送消息到指定交换机
 */
@Component
public class MsgSender {
    @Autowired
    private AmqpTemplate amqpTemplate;
    private static String EXCHANGE_NAME = "bootExchange";
    //发送信息的routingkey=>"cat.red"
    public void send1(){
        String routingKey = "cat.red";
        String msg = "this is my message,routingkey is "+routingKey;
        //交换机名称、routingkey以及发送的信息
        amqpTemplate.convertAndSend(EXCHANGE_NAME,routingKey,msg);
        System.out.println("已成功发送信息:"+msg);
    }
    //发送信息的routingkey=>"dog.red"
    public void send2(){
        String routingKey = "dog.red";
        String msg = "this is my message,routingkey is "+routingKey;
        //交换机名称、routingkey以及发送的信息
        amqpTemplate.convertAndSend(EXCHANGE_NAME,routingKey,msg);
        System.out.println("已成功发送信息:"+msg);
    }
}



接着我们在测试类中进行两个方法调用:


i

mport com.changlu.productor.config.MsgSender;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ProductorApplicationTests {
    @Autowired
    private MsgSender msgSender;
    @Test
    void sendMsg1() {
        msgSender.send1();
        msgSender.send2();
    }
}



消费者服务

step1:引入依赖以及配置rabbitmq


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>


application.yml


server:
  port: 8081  # 设置8081端口,不要与生产者服务其冲突
spring:
  application:
    name: consumer
  rabbitmq:
    addresses: 192.168.118.128:5672  # 同样注意rabbitmq运行端口默认为5672
    username: admin
    password: password
    virtual-host: /
    connection-timeout: 15000



step2:定义消费者并进行绑定监听



消费者1:绑定对应的queue1


import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
 * @ClassName Consumer1
 * @Author ChangLu
 * @Date 2021/9/25 13:52
 * @Description queue1对应routingkey=>cat.red
 */
@Component
@RabbitListener(queues = "queue1")
public class Consumer1 {
    @RabbitHandler
    public void process(String msg){
        System.out.println("queue1收到消息:"+msg);
    }
}



消费者2:绑定对应的queue2


import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
 * @ClassName Consumer1
 * @Author ChangLu
 * @Date 2021/9/25 13:52
 * @Description queue2对应routingkey=>*.red
 */
@Component
@RabbitListener(queues = "queue2")
public class Consumer2 {
    @RabbitHandler
    public void process(String msg){
        System.out.println("queue2收到消息:"+msg);
    }
}


测试

对于生产者服务或是消费者服务在该案例中任一一方启动都没有关系。本案例是topic类型的交换机,生产者服务先启动发送的消息会被暂时存储到指定队列中。


这里的话就先让生产者执行,发送了两条信息:



紧接着我们启动消费者服务,可以看到对应的queue1、queue2消费者分别收到了对应routingkey匹配的信息,此时我们可以来进行处理了!


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
19天前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
31 6
|
2月前
|
消息中间件 Java 数据库
新版 Seata 集成 RocketMQ事务消息,越来越 牛X 了!阿里的 Seata , yyds !
这里 借助 Seata 集成 RocketMQ 事务消息的 新功能,介绍一下一个新遇到的面试题:如果如何实现 **强弱一致性 结合**的分布式事务?
新版 Seata 集成 RocketMQ事务消息,越来越 牛X 了!阿里的 Seata , yyds !
|
2月前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
143 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
2月前
|
安全 Java 数据库
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
这篇文章是关于Apache Shiro权限管理框架的详细学习指南,涵盖了Shiro的基本概念、认证与授权流程,并通过Spring Boot测试模块演示了Shiro在单应用环境下的使用,包括与IniRealm、JdbcRealm的集成以及自定义Realm的实现。
49 3
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
99 2
|
2月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
191 1
|
2月前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
34 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
2月前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
36 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
205 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
下一篇
DataWorks