MQ基础(RabbitMQ)

server/2024/10/21 13:42:41/

通信

同步通信:就相当于打电话,双方交互是实时的。同一时刻,只能与一人交互。

异步通信:就相当于发短信,双方交互不是实时的。不需要立刻回应对方,可以多线程操作,跟不同人同时聊天。

RabbitMQ

过程

几个基础概念

publisher:生产者,发送消息的一方

consumer:消费者消费消息的一方

queue:队列,存储消息。生产者投递的消息会暂时存储在消息队列中,等待消费者消费。

exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。

virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的交换机,队列。

RabbitMQ框架

某个虚拟主机,生产者发送消息到交换机,再由交换机发送消息到队列,队列把消息推送给消费者。

SpringAMQP

依赖

<!--AMQP依赖,包含RabbitMQ--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>

配置说明

spring:rabbitmq:host: 192.168.32.130 # 你的虚拟机IPport: 5672 # 端口virtual-host: /hm # 虚拟主机username: lxs # 用户名password: 123456 # 密码listener:simple:prefetch: 1 # 每次只能获取一条消息,处理完成才能获取下一个消息

交换机说明

Fanout

Fanout交换机(广播)会将消息路由到每个绑定队列中。

Direct

Direct交换机不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key完全一致,才会接收到消息

Topic

Topic类型的ExchangeDirect相比,都是可以根据RoutingKey把消息路由到不同的队列。

只不过Topic类型Exchange可以让队列在绑定BindingKey 的时候使用通配符!

通配符规则
  • #:匹配一个或多个词

  • *:匹配不多不少恰好1个

举例:

  • item.#:能够匹配item.spu.insert 或者 item.spu

  • item.*:只能匹配item.spu

消息转换器

默认情况下Spring采用的序列化方式是JDK序列化。

配置JSON转换器

依赖<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.9.10</version> </dependency>

  配置类

@Bean
public MessageConverter messageConverter(){// 1.定义消息转换器Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();// 2.配置自动创建消息id,用于识别不同消息,也可以在业务中基于ID判断是否是重复消息jackson2JsonMessageConverter.setCreateMessageIds(true);return jackson2JsonMessageConverter;
}

例子

@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "topic.queue2"),exchange = @Exchange(name = "hm.topic", type = ExchangeTypes.TOPIC),key = "ch.*")
)
public void TopicQueueC(String a) {System.out.println("topic.queue2 ch.*" + a);
}


http://www.ppmy.cn/server/47367.html

相关文章

多输入多输出非线性对象的模型预测控制—Matlab实现

本示例展示了如何在 Simulink 中设计多输入多输出对象的闭环模型预测控制。该对象有三个操纵变量和两个测量输出。 一、非线性对象的线性化 运行该示例需要同时安装 Simulink 和 Simulink Control Design。 % 检查是否同时安装了 Simulink 和 Simulink Control Design if ~m…

6个PPT素材模板网站,免费!

免费PPT素材模板下载&#xff0c;就上这6个网站&#xff0c;建议收藏&#xff01; 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库是一个设计、办公、媒体等素材非常齐全的网站&#xff0c;站内有几百万的素材&#xff0c;其中PPT模板就有几十万个&#xff0c;…

旅游行业:解锁收入增长的新策略!

随着科技的飞速发展和人们生活水平的提高&#xff0c;旅游行业已成为全球范围内最具活力和潜力的行业之一。然而&#xff0c;在这个充满机遇与挑战的市场中&#xff0c;如何确保收入的持续增长&#xff0c;成为每一家旅游企业都必须面对的问题。在这个背景下&#xff0c;用友BI…

人工智能核心技术:机器学习总览

&#x1f4a1;机器学习作为人工智能的核心&#xff0c;与计算机视觉、自然语言处理、语音处理和知识图谱密切关联 &#x1f4a1;【机器学习】是实现人工智能的核心方法&#xff0c;专门研究计算机如何模拟/实现生物体的学习行为&#xff0c;获取新的知识技能&#xff0c;利用经…

C++语言·list链表(下)

还是之前说的&#xff0c;因为要写模板&#xff0c;为了避免链接出现问题&#xff0c;我们将所有内容都写到一个文件中去。首先就是画出链表的框架 链表本身只需要一个头节点就足以找到整条链表&#xff0c;而需要它拼接的节点我们再写一个模板。而我们知道list是一个带头双向循…

R语言安装caret包报错

R语言安装caret包报错&#xff1a;Error: package or namespace load failed for ‘caret’ in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck vI[[i]]): 不存在叫‘recipes’这个名字的程辑包 https://rbasics.org/packages/caret-package-in-r/ R版本的问题&…

雷池WAF-动态防护新功能体验

雷池WAF 雷池WAF&#xff08;Web Application Firewall&#xff0c;网络应用防火墙&#xff09;是由长亭科技开发的一个网络安全产品&#xff0c;它专注于保护Web应用免受黑客攻击。 今天主要讲的是长亭雷池最近新出的功能&#xff1a;动态防护 安装 雷池WAF支持多种安装方式…

使用from…import语句导入模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在使用import语句导入模块时&#xff0c;每执行一条import语句都会创建一个新的命名空间&#xff08;namespace&#xff09;&#xff0c;并且在该命名…