Spring Boot引入Rabbit MQ实现简单的demo

RabbitMq快速入门

(零)RabbitMq基本原理

基本组成

消息队列最基础的概念包括生产者,消费者,和队列。RabbitMq在生产者和 队列之间, 加入了交换器 (Exchange). 这样发消息者和队列就没有直接联系, 转而变成发消息者把消息给交换器, 交换器根据调度策略再把消息再给队列。RabbitMq基本的架构如下图:

这里写图片描述

除了交换机,Rabbit还有虚拟机的概念,一个虚拟机持有一组交换机、队列和绑定,绑定是指交换机与队列的绑定。
虚拟机是为了进行权限控制而提出的,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。

交换机类型

交换机有如下4种类型:

Direct: direct 类型的行为是”先匹配, 再投送”. 即在绑定时设定一个 routing_key, 消息的routing_key
匹配时, 才会被交换器投送到绑定的队列中去.简而言之,就是交换机根据路由键匹配队列。
Topic: 按规则转发消息(最灵活),也就是根据包含通配符的路由键匹配队列。
Headers: 设置header attribute参数类型的交换机。使用固定的路由键,但是有一个自定义匹配规则的类型.在队列与交换器绑定时, 会设定一组键值对规则,消息中也包括一组键值对( headers 属性), 当这些键值对有一对, 或全部匹配时, 消息被投送到对应队列.
Fanout:转发消息到所有绑定队列,也就是消息广播的模式,如果配置了routing_key也会被忽略

(一)安装Rabbit Server

windows安装:

安装RabbitMQ需要依赖Erlang:http://www.erlang.org/downloads
RabbitMQ官网下载:https://www.rabbitmq.com/download.html
安装完成之后,RabbitMQ会作为服务默认启动,CMD 运行: services.msc 查看服务是否成功启动:
这里写图片描述
然后还需要启动web管理插件:
在安装路径D:\Program Files\rabbitmq_server-3.7.7\sbin 下面执行

 .\rabbitmq-plugins enable rabbitmq_management

启动完成之后,重启RabbitMQ服务,并访问http://localhost:15672,使用guest/guest账号登录,如下,RabbitMQ的server就已经安装完成。
这里写图片描述

(二)构建Spring Boot项目

依赖引入

    <!--rabbitmq所需-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

application.yml配置

用户名密码需要自己去admin里面配置,或者使用默认的guest

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

RabbitMQ最简配置

@Configuration
public class RabbitConfig {

    @Bean
    public Queue helloQueue() {
        return new Queue("MQ1");
    }

}

编写消息队列生产者

@Component
public class Sender {

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send() {
        String context = "MQ1: " + new Date();
        System.out.println("Sender : " + context);
        this.rabbitTemplate.convertAndSend("MQ1", context);
    }

}

编写消息队列消费者

@Component
@RabbitListener(queues = "MQ1")
public class Receiver {

    @RabbitHandler
    public void process(String msg) {
        System.out.println("Receiver : " + msg);
    }
}

测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class SenderTest {

    @Autowired
    private Sender sender;

    @Test
    public void MQ1() throws Exception {
        sender.send();
    }

}

运行测试方法,可以在控制台看到如下日志:
这里写图片描述
再看RabbitMQ的web控制台:已经有了相关队列信息
这里写图片描述
本篇只是RabbitMQ入门的实现,更复杂的功能可根据业务需求改变。

猜你喜欢

转载自blog.csdn.net/qq_29534483/article/details/81505449
今日推荐