SpringBoot整合RabbitMQ

一、RabbitMQ简介

RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue Protocol)的开源实现

1、核心概念

Message
消息,由消息头和消息体组成。
消息头则是由一系列的可选属性组成:
①routing-key(路由键)
②priority:相对于其他消息的优先权
③delivery-mode:指出该消息可能需要持久性存储
消息体是不透明的。

Publisher
消息的生产者,也是一个向交换器发布消息的客户端应用程序

Exchange
交换器,用于接收生产者发送的消息并将这些消息路由给服务器中的队列。
Exchange有4种类型:
①direct:默认
②fanout
③topic
④headers

Queue
消息队列。用于保存消息直到发送给消费者。

Binding
绑定,用于消息队列和交换器之间的关联。
Exchange和Queue的绑定可以是多对多的关系。

Connection
网络连接,比如一个TCP连接

Channel
信道,多路复用连接中的一个独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP命令都是通过信道发出的,不管是发布消息、订阅队列、还是接收消息,这些动作都是通过信道完成的。

Consumer
消息的消费者,表示从一个消息队列中取得消息的客户端应用程序。

2、运行机制

生产者(producer)生产消息(message),发送给服务器(broker),然后服务器将消息交给交换器(exchage),交换器根据消息中的消息头所携带的路由键(routing-key)的绑定规则(binding),将其交给对应的消息队列(queue),最后消费者(consumer)从消息队列中取出消息进行消费。
producer-consumer

二、安装RabbitMQ

我们将使用docker在Linux虚拟机上安装RabbitMQ。

1、下载(下载带管理界面的版本)
docker pull docker.io/rabbitmq:3-management

2、启动RabbitMQ
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 6a98e7057e36

3、访问RabbitMQ的客户端工具
在这里插入图片描述
在这里插入图片描述

三、SpringBoot整合RabbitMQ

1、引入依赖
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-amqp</artifactId>
 </dependency>
2、application.properties配置
spring.rabbitmq.host=192.168.199.220
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.port=5672
3、开启基于注解的RabbitMQ
@EnableRabbit
@SpringBootApplication
public class SpringbootRabbitmqApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootRabbitmqApplication.class, args);
    }

}
4、配置自定义消息序列化方式
@Configuration
public class MyAMQPConfig {
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}
5、测试相关代码
@SpringBootTest
class SpringbootRabbitmqApplicationTests {


    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Autowired
    AmqpAdmin amqpAdmin;

    @Test
    public void createExchange(){
        Exchange exchange = new DirectExchange("amqpadmin.exchange");
        amqpAdmin.declareExchange(exchange);
        System.out.println("创建完成");
    }

    @Test
    public void createBinding(){
        Binding binding = new Binding("amqpadmin.queue", Binding.DestinationType.QUEUE,"amqpadmin.exchange","amqp.haha",null);
        amqpAdmin.declareBinding(binding);
        System.out.println("binding成功");
    }

    @Test
    public void createQueue(){
        amqpAdmin.declareQueue(new Queue("amqpadmin.queue",true));
        System.out.println("queue创建完成");
    }

    /**
     * 1、单播(点对点)
     */
    @Test
    void contextLoads() {
        //rabbitTemplate.send(exchange,routeKey,message);
        //object默认当成消息体,只需要传入要发送的对象,自动序列化发送给rabbitmq
        //rabbitTemplate.convertAndSend(exchange,routeKey,object);
        Map<String,Object> map = new HashMap<>();
        map.put("msg","first message");
        map.put("data",Arrays.asList("hello","world",123,true));
//        rabbitTemplate.convertAndSend("exchange.dirct","atguigu.news",map);
        rabbitTemplate.convertAndSend("exchange.dirct","atguigu.news",new Student("彭大大","男"));
    }

    @Test
    public void receive(){
        Object o = rabbitTemplate.receiveAndConvert("atguigu.news");
        System.out.println(o.getClass());
        System.out.println(o);
    }

    /**
     * 广播
     */
    @Test
    public void sendMsg(){
        rabbitTemplate.convertAndSend("exchange.fanout","",new Student("彭小小","女"));
    }

}

相关代码已上传到git上:https://github.com/pengyufenga/springboot_study.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值