RabbitMQ最全使用教程-小白也能看懂

1、队列: 点对点的通信(point - to - point): 消息发送者发送消息,消息代理将其放入到一个队列中,消息接收者从队列中获取消息内容,消息读取后被移除出队列。

点对点模式

2、主题: 发布publish/订阅subscribe 消息通信: 发布者发送消息到主题,多个接收者(订阅者)订阅这个主题,那么就会在消息到达时同时收到消息

发布-订阅模式

(三) RabbitMQ的核心概念

1、Message(消息): 不具名,由消息头和消息体租出,消息体是不透明的。消息头是由一系列的可选属性组成如,routing-key路由键,priority-相对其他消息的优先权,delivery-mode-指出该消息是否需要永久存储等。

2、Publicsher(消息的生产者): 是向交换器发布消息的客户端应用程序。

3、Exchange(交换器): 用来接受消息并且消息路由给服务器中的队列,有四种类型,即决定消息发布到那个队列,具体有以下的类型:

(1)、Direct:消息中的路由键(routingkey),如果和Binding中的binding key 一致,那么就将消息发到对应的队列中。

(2)、Fanout类型: 即广播模式,每个发送到fanout类型的交换器消息,交换器会将消息发送到它绑定的所有队列中,它转发消息是最快的。

(3)、Topic:主题,可以设置模糊匹配,会识别"#“和”*"号,#表示匹配0个或者多个单词,*匹配一个单词,单词之间使用:逗号隔开。

(4)、headers:实现发布订阅模型(基本不使用了)。

4、Queue(消息队列): 消息的容器,一个消息可以放在一个或者多个队列中。

5、Binding(绑定): 用于消息队列和交换器之间的关联,一个绑定就是基于路由键将交换机和消息队列连接起来的路由规则,交换器跟队列的绑定可以是多对多的关系

6、Connection(网络连接): 如一个Tcp连接。

7、Channel(信道): 多路复用连接中的一条独立的双向数据流通道,信道是建立在真实的TCP连接内的虚拟通道,AMQP命令都是通过信道发出去的,不管是发布消息,订阅队列,还是接收消息,都是通过信道完成,因为对于操作系统来说创建和销毁一个TCP连接都是很昂贵的开销,所以使用信道以实现复用一条TCP连接。

8、Consumer(消费者): 接受和消费消息。

9、Virtaul Hos(虚拟主机): 即小型的RabbitMQ服务器,它表示一批交换器,消息队列和相关对象,连接时必须指定,默认是:/(以路径区分)。

10、Broker: 消息队列服务器实体。

rabbitmq核心概念

五: Spring如何整合rabbitMQ?

(一) 添加依赖

org.springframework.boot

spring-boot-starter-amqp

2.2.1.RELEASE

(二) 设置配置信息

spring:

application:

name: RabbitMQ-Test # 应用名称

rabbitmq:

host: localhost #rabbitServer的地址

port: 5672 # 端口

username: guest # 用户名称

password: guest # 连接密码

virtual-host: /

server:

port: 9090

(三) 启动类添加EnableRabbit注解

@SpringBootApplication

@EnableRabbit

public class RabbitMqTestApplication {

public static void main(String [] args){

SpringApplication.run(RabbitMqTestApplication.class,args);

}

}

六: 如何通过代码操作RabbitMQ?

注: 因为本篇文章到此处已经是比较长了,考虑到大家的阅读时间,所以RabbitMQ的操作的具体参数会另起一片文章做详细的讲解,需要了解操作参数的详细含义的,可以点击文章末尾的连接跳转,谢谢理解。

(一) Spring提供操作RabbitMQ的工具类

1、RabbitTemplate: 是Spring集成RabbitMQ而提供的一个工具类,跟JdbcTemplate一样,可以通过它进行消息的发送和接收。

2、RabbitAdmin : 主要用于管理交换机和队列的信息。

(二) 测试的公共执行代码

// 测试前加载RabbitAdmin

private static AmqpAdmin amqpAdmin;

private static ConnectionFactory connectionFactory;

@BeforeClass

public static void loadNeedBean(){

com.rabbitmq.client.ConnectionFactory connFactory = new com.rabbitmq.client.ConnectionFactory();

connFactory.setHost(“47.91.198.211”);

connFactory.setPort(5672);

connFactory.setUsername(“guest”);

connFactory.setPassword(“guest”);

connFactory.setVirtualHost(“/”);

connectionFactory = new CachingConnectionFactory(connFactory);

// RabbitAdmin 主要用于管理交换机和队列的信息

amqpAdmin = new RabbitAdmin(connectionFactory);

}

(三) 操作交换机(Exchange)

// 交换机操作

@Test

public void rabbitExchangeTest() throws Exception{

// 创建交换机

// 参数分别是: 交换机名称,是否持久化,是否自动删除

Exchange exchange = new DirectExchange(“direct_test”,true,false);

amqpAdmin.declareExchange(exchange);

// 删除交换机

amqpAdmin.deleteExchange(“direct_test”);

}

(四) 操作队列(Queue)

// 操作队列

@Test

public void rabbitExchangeAndQueueTest() throws Exception{

// 创建队列

Queue queue = new Queue(“queue_test111”);

amqpAdmin.declareQueue(queue);

// 删除队列

amqpAdmin.deleteQueue(“queue_test111”);

}

(五) 交换机和队列的绑定

// 队列和交换机操作

@Test

public void rabbitQueueTest(){

// 创建交换机

Exchange exchange = new DirectExchange(“direct_test2”,true,false);

amqpAdmin.declareExchange(exchange);

// 创建队列

Queue queue = new Queue(“queue_test”,true);

amqpAdmin.declareQueue(queue);

// 绑定交换机交换机

//Binding binding = new Binding(“direct_test2”, Binding.DestinationType.EXCHANGE,“direct_test2”,“rount-key”,null);

// 队列绑定到交换机

Binding binding = new Binding(“queue_test”, Binding.DestinationType.QUEUE,“direct_test2”,“rount-key”,null);

amqpAdmin.declareBinding(binding);

}

(六) 消息生产者发送消息到消息队列中

@Test

public void messageProductTest(){

// 消息操作模板

RabbitTemplate rest = new RabbitTemplate(connectionFactory);

MessageProperties messageProperties = new MessageProperties();

messageProperties.setContentType(MessageProperties.CONTENT_TYPE_JSON);

// 发送消息方式一

String msg = “hello world”;

Message message = new Message(msg.getBytes(),messageProperties);

// 发送消息方式二

HashMap map = new HashMap();

map.put(“key”,“value”);

rest.convertAndSend(“direct_test2”,“rount-key”,map);

}

(七) 消息消费者从队列中消费(手动执行的方式)

// 消息的消费者

@Test

public void messageConsumerTest() throws Exception{

RabbitTemplate rest = new RabbitTemplate(connectionFactory);

// 从名为queue_test的队列中获取消息

Message queue_test = rest.receive(“queue_test”);

System.out.println(new String(queue_test.getBody(),“UTF-8”));

}

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

essage queue_test = rest.receive(“queue_test”);

System.out.println(new String(queue_test.getBody(),“UTF-8”));

}

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

[外链图片转存中…(img-wEDjtAB4-1714057288193)]

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

[外链图片转存中…(img-8kecq3tK-1714057288194)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/16017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

装备制造项目管理软件:奥博思PowerProject项目管理系统

数字化正逐步改变着制造方式和企业组织模式。某制造企业领导层透露,在采用数字化项目管理模式后,企业的发展韧性更加强劲,构筑起了竞争新优势,企业产品研制周期缩短25%,生产效率提升18%。 随着全球经济的发展&#xf…

简单好用的文本识别方法--付费的好用,免费的更有性价比

文章目录 先说付费的进入真题,免费的来喏!PixPin微信 先说付费的 直达网址!!! 进入真题,免费的来喏! PixPin 商店里就有 使用示例: 可以看到:贴在桌面上的图片可以复制图片中的文字,真的很…

AI语音及其应用

文章目录 一、基本认识二、AI语音应用场景三、真人录音与AI配音的区别四、AI语音创作基本步骤 本文将简单了解下AI语音、应用场景及其优势和创作核心步骤。 一、基本认识 AI语音是指基于人工智能技术开发的语音识别和语音合成系统。语音识别是指计算机识别和理解人类语音的能力…

【机器智能】:AI机器学习在医疗服务的广泛应用与实践案例

目录 引言一,什么是机器学习二,AI在医学影像诊断中的应用三,AI在个性化治疗方案设计中的应用四,医疗图像识别技术五,医疗语言识别技术六,结语 引言 随着人工智能(AI)和机器学习技术…

SQL注入:原理及示例讲解,配置mysql环境变量,pikachu靶场搭建

SQL注入原理 SQL注入(SQL Injection)是一种代码注入技术,攻击者通过将恶意的SQL代码插入到应用程序的输入字段中,诱使后台数据库执行这些恶意代码,从而对数据库进行未授权的操作。常见的操作包括获取敏感数据、篡改数…

知能行——考研数学利器

知能行使用体验全记录 首先,我先介绍一下自己,我是2018级的,2022年6月毕业,本科沈阳工业大学(双非),今年二战,专业课自动控制原理,数二英二,目标是江南大学控…

[书生·浦语大模型实战营]——第三节:茴香豆:搭建你的 RAG 智能助理

0.RAG 概述 定义:RAG(Retrieval Augmented Generation)技术,通过检索与用户输入相关的信息片段,并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺…

社交媒体数据恢复:聊天宝

请注意,本教程仅针对聊天宝应用程序,而非其他聊天软件。以下是详细的步骤: 首先,请确保您已经登录了聊天宝应用程序。如果您尚未登录,请使用您的账号登录。 在聊天宝主界面,找到您希望恢复聊天记录的对话框…

小明同学的考试分数统计:总分、平均分与方差计算进阶

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、原始方法介绍与问题发现 原始方法存在的问题 二、优化方案:使用列表简化代…

串口中断原理及实现

一、串口的原理 SM0、SM1——串行口工作模式 SM0SM1模式特点00模式0移位寄存器方式,用于I/O口扩展01模式18位UART,波特率可变10模式29位UART,波特率为时钟频率/32或/6411模式39位UART,波特率可变 TI、RI——发送、接收中断标志位 TITI0 允许发送>TI1 发送完成后…

【全网最全】2024电工杯数学建模A题54页A题保奖成品论文+配套代码

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片链接,那是获取资料的入口! 【全网最全】2024电工杯数学建模A题成品论文前三题完整解答matlabpy代码等(后续会更新成品论文)「首先来看看目前已有的资料&am…

出书,是「盖你自己的房子」你知道吗?

出书是「盖你自己的房子」 尊敬的出书盟友: 你好!我希望这封信能够激发您对出书和阅读的热情。 在当今信息爆炸的时代,每个人都有机会分享自己的故事、思想和知识。而书籍作为一种流传百年的媒体,依旧承载着无限的力量和影响力…

Java——接口后续

1.Comparable 接口 在Java中,我们对一个元素是数字的数组可以使用sort方法进行排序,如果要对一个元素是对象的数组按某种规则排序,就会用到Comparable接口 当实现Comparable接口后,sort会自动调用Comparable接口里的compareTo 方法…

C++的类和对象

C面向对象的三大特性:封装,继承,多态 万事万物皆可为对象,有其相应的属性和行为 一、封装 1.1 封装的意义 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制 在设计类的时候,属性…

Sql语句DQL操作 查询操作单表 多表 子表(嵌套)

DQL 查询语句 查询指定的列 **语法 : ** SELECT [查询列表] FROM 表名结果可以是:表格中的字段,常量,表达式,函数查询的结果是虚拟表格,不可以操作 是只读的可以对查询结果进行 算术运算( - * /);**特点: ** 查询的列表可以是:表中的字段,常量,表达式,函数查询的结果是一个虚…

深入理解 Spring 上下文(Context)层次结构

前言 在使用 Spring 框架进行应用程序开发时,Spring 上下文(Context)是一个非常重要的概念。Spring 上下文提供了一个环境,用于管理应用程序中的对象(通常称为 Bean)及其之间的依赖关系。在复杂的应用程序…

数据仓库与数据挖掘实验练习6-7(实验四2024.5.22)

tips: 列出虚拟环境:conda env list 激活虚拟环境:activate hi 进入jupyter-lab:jupyter lab 练习6 1. 处理字符串空格 发现问题: 使用 values 属性查看数据时,如果发现 Name 列没有对齐,很可能是 Name 左…

spring模块(三)Spring AOP(2)使用

一、demo 1、spring项目 &#xff08;1&#xff09;pom <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.13.RELEASE</version></dependency>&l…

0元入驻抖音小店,真的是好事吗?

大家好&#xff0c;我是喷火龙。 抖音小店去年推出0元入驻抖音小店个人店的政策&#xff0c;简而言之就是只要一张身份证就可以开店&#xff0c;不需要营业执照&#xff0c;也不需要交保证金。 很多人一听很心动&#xff0c;因为没有任何成本就可以开店&#xff0c;于是纷纷跑…