谷粒商城——RabbitMQ

0. 消息中间件

1.RabbitMQ的核心概念

2. 工作流程

整体架构:

相关细节:

上述要注意的是:

路由键包含在message的头中,其作用是用于指定该消息存储与哪个消息队列中。

信道是客户端(包括生产者和消费者)用来与RabbitMQ建立联系的,一个客户端只和RabbitMQ存在一个连接,但一个连接里面包含多条信道。

2.1Exchange(交换机)类型

交换机的原理就是:每一个消息都有其路由键(routing key),每一个消息队列有自己的binding key。交换机就是通过这两个的匹配关系将消息绑定到对应的队列中

2.1.1direct类型

如果routing key=binding key,交换机就会把这个消息绑定到对应的队列中。

2.1.2fanout类型

fanout类型类似于广播,他不查看routing key与binding key的匹配关系,而是将消息绑定到所有队列。

2.1.3topic类型

将routing key与binding key按照模式匹配的方式进行匹配。

2.1.4headers模式(不用,性能差)

Headers 类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中的 headers 属性进行匹配。在绑定队列和交换器时制定一组键值对,headers是键,交换机是值。

3.Springboot整合RabbitMQ(订单微服务)

首先,需要引入spring-boot-starter-amqp:

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

配置相关的配置:

# RabbitMQ配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
# 虚拟主机配置
spring.rabbitmq.virtual-host=/
# 开启发送端消息抵达Broker确认
spring.rabbitmq.publisher-confirms=true
# 开启发送端消息抵达Queue确认
spring.rabbitmq.publisher-returns=true
# 只要消息抵达Queue,就会异步发送优先回调returnfirm
spring.rabbitmq.template.mandatory=true
# 手动ack消息,不使用默认的消费端确认
spring.rabbitmq.listener.simple.acknowledge-mode=manual

4.Springboot使用RabbitMQ

创建交换机:
    @Autowired
    private AmqpAdmin amqpAdmin;
    /**
     * 1、如何创建Exchange、Queue、Binding
     *      1)、使用AmqpAdmin进行创建
     * 2、如何收发消息
     */
    @Test
    public void createExchange() {

        Exchange directExchange = new DirectExchange("hello-java-exchange",true,false);
        amqpAdmin.declareExchange(directExchange);
        log.info("Exchange[{}]创建成功:","hello-java-exchange");
    }

AmqpAdmin用于对RabbitMQ中的交换机、队列和交换机与队列的绑定关系进行实例化的管理类。

创建队列:
创建绑定类:

这里的routing key就相当于binding key。

发送消息:

如果希望消息内容是一个类对象,需要先对对象进行序列化,需要在配置类中先配置序列化操作:

随后再发送实体类:

接收消息------RabbitListener:

通过RabbitListener监听相应的队列:

5.RabbitMQ消息确认机制------可靠抵达

目的:如果系统发生故障,需要保证消息不会产生丢失。

生产者的确认机制(确认模式、退回模式)

受到消息返回成功回调,未收到消息用退回回调。

消费者确认机制(消息确认机制ack):

相关推荐
奔跑吧邓邓子2 小时前
大数据利器Hadoop:从基础到实战,一篇文章掌握大数据处理精髓!
大数据·hadoop·分布式
weixin_453965007 小时前
[单master节点k8s部署]30.ceph分布式存储(一)
分布式·ceph·kubernetes
weixin_453965007 小时前
[单master节点k8s部署]32.ceph分布式存储(三)
分布式·ceph·kubernetes
Dylanioucn9 小时前
【分布式微服务云原生】掌握分布式缓存:Redis与Memcached的深入解析与实战指南
分布式·缓存·云原生
鸡c10 小时前
rabbitmq----数据管理模块
rabbitmq
落落落sss11 小时前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
weixin_4539650012 小时前
[单master节点k8s部署]31.ceph分布式存储(二)
分布式·ceph·kubernetes
坎坎坷坷.12 小时前
分布式理论:拜占庭将军问题
分布式
Xua305516 小时前
MQ高级:RabbitMQ小细节
rabbitmq
极客先躯19 小时前
高级java每日一道面试题-2024年10月3日-分布式篇-分布式系统中的容错策略都有哪些?
java·分布式·版本控制·共识算法·超时重试·心跳检测·容错策略