Spring Boot实战|整合RabbitMQ

《JavaEE开发的颠覆者: Spring Boot实战》系列读书笔记

SpringBoot 整合RabbitMQ


什么是RabbitMQ?

  • RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,服务器端用Erlang语言编写,支持多种客户端,RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层,保存这个数据。

RabbitMQ的优点

  • 消息总线(Message Queue),是一种跨进程通信机制,用于上下游传递消息。

    消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。

    RabbitMQ 在生产者与队列之间, 加入了交换机 (Exchange). 这样发消息者和队列就没有直接联系,
    转而变成发消息者把消息给交换器, 交换器根据调度策略再把消息再给队列。

    交换机的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息。

交换机有四种类型:Direct, topic, Headers and Fanout

  1. Direct:direct 类型的行为是”先匹配, 再投送”. 即在绑定时设定一个 routing_key,消息的routing_key 匹配时, 才会被交换器投送到绑定的队列中去.
  2. Topic:按规则转发消息(最灵活)
  3. Headers:设置 header attribute 参数类型的交换机
  4. Fanout:转发消息到所有绑定队列

环境配置(Wndows环境)
安装Erlang
Erlang下载地址
安装RabbbitMQ
RabbbitMQ下载地址
下载安装完成之后,在命令行打开RabbitMQ文件sbin目录,然后输入命令:
rabbitmq-plugins enable rabbitmq_management,启动管理工具。
访问:http://127.0.0.1:15672/
使用默认账号登录:guest/ guest
在这里插入图片描述

简单使用

添加依赖

  • 主要是添加 spring-boot-starter-amqp 的支持

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

配置文件

  • 在application.propertions中配置 RabbitMQ 的地址、端口、虚拟主机等信息

    spring.rabbitmq.host=127.0.0.1
    spring.rabbitmq.port=5672
    spring.rabbitmq.virtualhost=testhost
    spring.rabbitmq.username=admin
    spring.rabbitmq.password=XX
    

队列配置

@Configuration
public class RabbitConfig {
    @Bean
    public Queue Queue() {
        return new Queue("joker");
    }    
}

生产者

  • rabbitTemplate 是 Spring Boot 提供的默认实现,根据key全文匹配去寻找队列。

    @Component
    public class HelloSender {
    
    	@Autowired
    	private AmqpTemplate rabbitTemplate;
    
    	public void send() {
    		String context = "hello rabbit";
    		System.out.println("发送消息 : " + context);
    		this.rabbitTemplate.convertAndSend("joker", context);
    	}
    
    }
    

消费者

@Component
@RabbitListener(queues = "joker")
public class HelloReceiver {

    @RabbitHandler
    public void receive(String hello) {
        System.out.println("接收消息  : " + hello);
    }

}

测试

@Test
	public void hello() throws Exception {
		helloSender.send();
	}

在这里插入图片描述


参考
RabbitMQ教程
RabbitMQ 详解

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值