栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

【Spring Boot实战与进阶】集成RabbitMQ的实例详解,java从入门到精通pdf脚本之家

【Spring Boot实战与进阶】集成RabbitMQ的实例详解,java从入门到精通pdf脚本之家

一、简介


RabbitMQ是采用 Erlang语言实现AMQP协议的消息中间件,AMQP全称是 Advanced Message Queue Protocolo,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

常用的交换机有以下三种:

1、Direct Exchange(直连型交换机)

根据消息携带的路由键(routing key)将消息投递给对应队列,direct exchange 适用于消息的单播发送。

工作流程如下:

  • 将一个队列绑定到某个交换机上,同时赋予该绑定 一个 route key。

  • 当一个携带 route key为R 的消息被发送到 direct exchange 时,exchange 会将消息路由到 绑定值同样为 R 的队列。注意Route Key和绑定值要完全匹配才行。

direct exchange 经常用于在 多个 worker 中分配任务,当这样做时,需注意,在AMQP 0-9-1中,消息的负载均衡发生在 consumer之间,而不是在 queue之间。

2、Fanout Exchange(扇型交换机)

一个 fanout exchange 会将消息分发给所有绑定到此 exchange 的queue中,不管 queue中的 route key。如果有 N 个 Queue 绑定到 一个 fanout exchange 时,那么此时 exchange 收到消息时,会将此消息分发到 这 N 个 queue中,由于此性质, fanout exchange 也常用消息的广播。

**3、Topic Exchange(主题交换机

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

)**

topic exchange 会根据 route key 将消息分发到与此消息的 route key 相匹配的并且绑定此exchange的一个或多个 queue。这里的相匹配与 direct exchange的完全匹配的路由规则不一样,topic exchange 在匹配规则上进行了扩展,规则如下:

  • RoutingKey(路由键)为一个点号 “.” 分隔的字符串,如 “com.rabbitmq.client”、“java.util.concurrent”、"com.hidden.client"等

  • BindingKey(绑定键) 和 RoutingKey一样也是点号 “.” 分隔的字符串

  • BindingKey (绑定键) 中可以存在两种 特殊字符串 “*” 和 “#” ,用于做模糊匹配,其中 " # " 用于匹配一个单词," * "用于匹配多个单词

topic exchange 经常用于实现 publish/subscribe模型,即消息的多播模型。这里的Topic Exchange就适用于发布/订阅模型。RabbitMQ的一个原则就是,消息不能直接投递到 Queue中,必须先将消息投递到 Exchange中,然后由Exchange 按照路由规则将消息投递到对应的 Queue中。

二、集成RabbitMQ


1、引入依赖

org.springframework.boot

spring-boot-starter-amqp

2、配置RabbitMQ连接信息

spring:

rabbitmq:

host: 127.0.0.1

port: 5672

password: guest

username: guest

3、创建RabbitMQ配置类和消息队列

@Configuration

public class RabbitConfig {

@Bean

public Queue getQueue() {

return new Queue(“QA”);

}

}

4、创建生产者

@Component

public class MsgProducer {

@Autowired

private AmqpTemplate rabbitTemplate;

public void send() {

rabbitTemplate.convertAndSend(“QA”, “这是一条最新消息”);

}

}

5、创建消费者

@Component

@RabbitListener(queues = “QA”)

public class MsgConsumer1 {

@RabbitHandler

public void process(String msg) {

System.out.println("【消费者接收的消息】: " + msg);

}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/663723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号