博主精品——RabbitMQ(更偏向于业务的MQ中间件)

DBC 702 0
来源:百度百科

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

一、简单的使用MQ

1.搭建就不详细介绍了,网上有很多,这里推荐一种最简单的docker傻瓜式搭建

云服务器基础设施安装之RabbitMQ安装——(难度:无,等级:0)

1年前 (2022-08-29) 0
博主精品——RabbitMQ(更偏向于业务的MQ中间件)插图

2.引入依赖

		<!--引入AMQP-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
		</dependency>

3.添加配置文件

##----------rabbit配置--------------
spring.rabbitmq.host=8.142.19.202
spring.rabbitmq.port=5672
#需要手工创建虚拟主机
spring.rabbitmq.virtual-host=dev
spring.rabbitmq.username=admin
spring.rabbitmq.password=666
#消息确认方式,manual(手动ack) 和auto(自动ack); 消息消费重试到达指定次数进到异常交换机和异常队列,需要改为自动ack确认消息
spring.rabbitmq.listener.simple.acknowledge-mode=auto
这里输入自己的账号密码即可,并没有什么需要注意的,注释非常清楚

4.添加MQ配置类

RabbitMQConfig

点击查看完整内容

5.编写消费者

DbcTestAddLinkMQListener

点击查看完整内容
温馨提示

当代码编写到了这里,我们其实已经基本完成了,当我们运行项目之后,就可以在RabbitMQ后台看到相应的交换机和对应的队列了,如下图所示

示例图

博主精品——RabbitMQ(更偏向于业务的MQ中间件)插图2
博主精品——RabbitMQ(更偏向于业务的MQ中间件)插图4

这里我们看到还有一个Error,这我们后面会说到

6.编写生产者

    @Override
    public void addMQ() {
        UserDO userDO = UserDO.builder()
                .name("刘罗锅")
                .time(new Date())
                .build();

        rabbitTemplate.convertAndSend(rabbitMQConfig.getDbcTestEventExchange(), rabbitMQConfig.getDbcTestAddRoutingKey(),userDO);
    }
温馨提示

大功告成!就是那么简单,这就简单的完成了MQ的第一步,简单的MQ使用

二、配置异常交换机

为什么要配置异常交换机?

在我们的服务在进行高并发操作的时候,有时候不可避免的会出现消费失败的情况,这时候我们可以让MQ进行自动的重新消费,我们定义好重新消费的次数,当重试到该次数之后还是没有能够进行正常消费,那么我们就将这个消息投递到异常交换机中,来进行其他操作,比如说人工处理等。。。

1.定义异常配置

#开启重试,消费者代码不能添加try catch捕获不往外抛异常
spring.rabbitmq.listener.simple.retry.enabled=true
#最大重试次数
spring.rabbitmq.listener.simple.retry.max-attempts=4
# 重试消息的时间间隔,5秒
spring.rabbitmq.listener.simple.retry.initial-interval=5000

2.定义错误交换机、队列配置类

RabbitMQErrorConfig

点击查看完整内容

3.定义异常消费者

DbcTestErrorMQListener

package com.example.test05.demo.listener;

import com.example.test05.demo.model.UserDO;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * @author DBC
 * @version 1.0.0
 * @date 2023年01月01日 16:53:26
 * @website dbc655.top
 */
@Component
@Slf4j
@RabbitListener(queuesToDeclare = { @Queue("dbc.error.queue") })
public class DbcTestErrorMQListener {

    @RabbitHandler
    public void shortLinkHandler(UserDO eventMessage, Message message, Channel channel) throws IOException {
        log.error("告警:监听到消息DbcTestErrorMQListener eventMessage消息内容:{}",eventMessage);
        log.error("告警:Message:{}",message);
        log.error("告警成功,发送通知短信");

    }



}

我们可以如下图中清晰的看到,当消息消费失败4次之后,这个错误消息我们也进行了消费了,好了,又完成一个小功能![aru_36]

点击查看完整内容

博主精品——RabbitMQ(更偏向于业务的MQ中间件)插图6

三、进阶操作 —— ???

未完待续。。。
最后更新于:2023年1月3日11:05:52

发表评论 取消回复
表情 图片 链接 代码

分享