SpringBoot整合RabbitMQ及其原理分析

这篇具有很好参考价值的文章主要介绍了SpringBoot整合RabbitMQ及其原理分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一篇:RabbitMQ基础知识

1、相关依赖

这里无需指定版本号,让其跟着SpringBoot版本走。本示例使用SpringBoot版本号为2.7.10。

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

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

2、生产者、消费者

创建两个SpringBoot应用,模拟消息生产者与消费者【publisher、consumer】。

2-1生产者

编写配置文件,用户名和密码等自行修改 这里虚拟机的名称是上一篇文章中新建的。

server.port=8082
#rabbitmq服务器ip
spring.rabbitmq.host=localhost
#rabbitmq的端口
spring.rabbitmq.port=5672
#用户名
spring.rabbitmq.username=用户名
#密码
spring.rabbitmq.password=密码
#配置虚拟机
spring.rabbitmq.virtual-host=demo

声明交换机、队列并绑定:

@Configuration
public class RabbitMqConfig {

    @Bean
    public RabbitTemplate rabbitTemplate(CachingConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter());
        return rabbitTemplate;
    }

    @Bean
    public MessageConverter jackson2JsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public DirectExchange getExchange(){
        return new DirectExchange("directExchange",false,false);
    }

    @Bean
    public Queue getQueue(){
        return new Queue("publisher.addUser",true,false,false);
    }

    @Bean
    public Binding getBinding(DirectExchange exchange,Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with("publisher.addUser");
    }
}

新建User实体类

@Data
public class User {
    private Long id;
    private String name;
    private String desc;
}

在方法中使用RabbitTemplate来发送消息:

public interface PublisherService {

    /**
     * 添加用户
     * @param user 用户信息
     */
    void addUser(User user);

}
@RequiredArgsConstructor
@Service
public class PublisherServiceImpl implements PublisherService{

    private final RabbitTemplate rabbitTemplate;

    @Override
    public void addUser(User user) {
        rabbitTemplate.convertAndSend("directExchange","publisher.addUser",user);
    }
}

以上需要注意的就是交换机的名称队列名routingKey。示例中使用的是直连交换机,routingKey需要和队列名保持一致。不懂的可以查看上一篇文章。

controller:

@RequiredArgsConstructor
@RestController
@RequestMapping("/user")
public class UserController {


    private final PublisherService publisherService;

    @PostMapping("/add")
    public void add(){
        User user = new User();
        user.setId(1000L);
        user.setName("黄忠");
        user.setDesc("老兵不死,只是逐渐凋零");
        publisherService.addUser(user);
    }

}

2-2消费者

消费者的配置和生产者一样,不赘述了,直接看代码:

@Service
@Slf4j
public class ConsumerService {


    @RabbitListener(queues ="publisher.addUser")
    public void addUser(String userStr){
        User user = JSONObject.parseObject(userStr,User.class);
        log.info(user.toString());
    }
}

@RabbitListener 注解是指定某方法作为消息消费的方法,指定队列名称。@RabbitListener 如果标注在类上,需配合 @RabbitHandler 注解一起使用,根据接受的参数类型进入具体的方法中。

2-3测试

消费端在启动时可能会报找不到交换机或队列,只需要让生产者发送一次消息,从控制台就可以看到相关的交换机和队列等信息了。

SpringBoot整合RabbitMQ及其原理分析,Springboot,RabbitMQ单排日记,rabbitmq,spring boot,原力计划

可以看到消费者成功消费了消息:

SpringBoot整合RabbitMQ及其原理分析,Springboot,RabbitMQ单排日记,rabbitmq,spring boot,原力计划

SpringBoot整合RabbitMQ及其原理分析,Springboot,RabbitMQ单排日记,rabbitmq,spring boot,原力计划

3、消费流程

通过上述操作,我们已经会简单地使用RabbitMQ了,接下来了解一下它的整个流程。如此可以让我们掌握的更牢固。

SpringBoot整合RabbitMQ及其原理分析,Springboot,RabbitMQ单排日记,rabbitmq,spring boot,原力计划

生产者:

  • 生产者连接到Message Broker【也就是RabbitMQ服务】,建立一个连接( Connection)开启一个信道(Channel)。
  • 生产者声明一个交换机,并设置相关属性,比如交换机类型、是否持久化等。
  • 生产者声明一个队列并设置相关属性。
  • 生产者通过路由键【Routing Key】将交换机和队列绑定。
  • 生产者发送消息至RabbitMQ Broker,其中包含路由键、交换器等信息。
  • 相应的交换机根据接收到的路由键查找相匹配的队列。
  • 如果找到,则将从生产者发送过来的消息存入相应的队列中。
  • 如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者
  • 关闭信道。
  • 关闭连接。

消费者:文章来源地址https://www.toymoban.com/news/detail-571789.html

  • 消费者连接到RabbitMQ Broker ,建立一个连接(Connection),开启一个信道(Channel) 。
  • 消费者向RabbitMQ Broker 请求消费相应队列中的消息,可能会设置相应的回调函数,
  • 等待RabbitMQ Broker 回应并投递相应队列中的消息,消费者接收消息。
  • 消费者确认(ack) 接收到的消息。
  • RabbitMQ 从队列中删除相应己经被确认的消息。
  • 关闭信道。
  • 关闭连接。

到了这里,关于SpringBoot整合RabbitMQ及其原理分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot 整合RabbitMQ

    2007 年发布,是一个在 AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议 )的开源实现,由于erlang 语言的高并发特性,性能较好,本质是个队列,FIFO 先入先出

    2024年02月15日
    浏览(52)
  • RabbitMQ整合Springboot

    目录 一、配置 二、使用 (1)创建普通交换机 (2) 创建普通队列 (3)绑定 交换机--队列 (4)创建带有死信交换机的队列 (5)生产者 (6)消费者 (7)Message对象 (8)延时队列优化(死信实现延时,有缺陷) 三、Rabbitmq插件实现延迟队列(重点) 四、发布确认 (1)确认回调

    2024年02月15日
    浏览(41)
  • SpringBoot整合实现RabbitMQ

    本文大纲 一.RabbitMQ介绍 二.RabbitMQ的工作原理 2.1 RabbitMQ的基本结构 2.2 组成部分说明 2.3 生产者发送消息流程 2.4 消费者接收消息流程 三.SpringBoot 整合实现RabbitMQ 3.1创建mq-rabbitmq-producer(生产者)发送消息 3.1.1pom.xml中添加相关的依赖 3.1.2 配置application.yml 3.1.3 配置RabbitMQ常量类

    2024年02月17日
    浏览(44)
  • SpringBoot项目整合RabbitMQ

    消息队列(Message Queue)是分布式系统中常用的组件,它允许不同的应用程序之间通过发送和接收消息进行通信。Spring Boot提供了简单且强大的方式来整合消息队列,其中包括RabbitMQ、ActiveMQ、Kafka等多种消息队列实现。 本文将以RabbitMQ为例,详细介绍如何使用Spring Boot来整合消

    2024年02月09日
    浏览(55)
  • SpringBoot 整合 RabbitMQ

    由于有的 Idea 不选择插线无法创建 Spring Boot 项目,这里我们先随便选一个插件,大家也可以根据需求选择~~ 把版本改为 2.7.14 引入这两个依赖: 配置 application.yml文件 Config 类 : RabbitMQConfig 测试类: RabbitMQConfigTests 结果 当我们启动 测试类 之后就可以发现我们的 rabbitmq 界面里的

    2024年02月10日
    浏览(38)
  • SpringBoot整合RabbitMQ(基础)

    一.环境准备 1、在pom文件中引入对应的依赖: 2、在application.yml配置文件中配置RabbitMQ: 二、整合 点对点,简单模式 ①配置文件中声明队列 ②创建生产者 消息发送成功后,在web管理页面查看: 可以看到对应队列中产生了消息 ③创建消费者 启动项目,可以看到消息成功消费:

    2024年02月11日
    浏览(36)
  • 单个springboot整合rabbitmq

    rabbitmq是一种消息中间件,是基于erlang语言开发的AMQP(高级消息队列协议)的开源实现。 本质是个队列,FIFO先入先出。 1.1.1 rabbitmq特性: 开源,性能优秀,稳定保障 提供可靠的消息投递模式,返回模式 于Spring AMQP完美整合,API丰富 集群模式丰富 高可用 1.1.2 rabbitmq主要结构 生产

    2024年02月10日
    浏览(65)
  • 【RabbitMQ】4 Spring/SpringBoot整合RabbitMQ

    spring-amqp 是对AMQP的一些概念的一些抽象, spring-rabbit 是对RabbitMQ操作的封装实现。 主要有几个核心类 RabbitAdmin 、 RabbitTemplate 、 SimpleMessageListenerContainer 等。 RabbitAdmin 类完成对Exchange,Queue,Binding的操作,在容器中管理了 RabbitAdmin 类的时候,可以对Exchange,Queue,Binding进行自

    2024年01月22日
    浏览(43)
  • springboot整合rabbitmq死信队列

    什么是死信 需要测试死信队列,则需要先梳理整体的思路,如可以采取如下方式进行配置: 从上面的逻辑图中,可以发现大致的思路: .1. 消息队列分为正常交换机、正常消息队列;以及死信交换机和死信队列。 2. 正常队列针对死信信息,需要将数据 重新 发送至死信交换机

    2024年02月11日
    浏览(47)
  • RabbitMQ与SpringBoot整合实践

    作者:禅与计算机程序设计艺术 2020年是一个转折点,现代化的信息社会已经开启了数字化进程,越来越多的人开始接受信息技术作为工作的一部分。相较于传统的技术岗位,人工智能、大数据、云计算领域的软件工程师更加需要具备实际项目应用能力、高超的计算机和通信

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包