首页 / 知识
RabbitMQ支持的消息模型
2023-04-11 16:19:00

1 RabbitMQ
基于AMQP协议,erlang语言开发, 是部署最广泛的开源消息中间件,是最受欢迎的开源消息中间件之一。
官网:https://www.rabbitmq.com/
官方教程:https://www.rabbitmq.com/getstarted.html
AMQP协议
AMQP (advanced message queuing protocol,翻译是:高级消息队列协议)、 在2003年时被提出, 最早用于解决金融领不同平台之间的消息传递交互问题。顾名思义,AMQP是- 种协议,更准确的说是一种binary wirelevel protocol (链接协议)。 这是其和JMS的本质差别,AMQP不从API层进行限定, 而是直接定义网络交换的数据格式。这使得实现了AMQP的provider天然性就是跨平台的。以下是AMQP协议模型:
生产者把消息,发送给交换机。交换机和队列是一一绑定就是点对点,交换机路由到其他队列,可以做路由。
2 RabbitMQ支持的消息模型
2.1官网
https://www.rabbitmq.com/getstarted.html
2.2引入依赖
<!--引入rabbitmq的相关依赖-->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.7.3</version>
</dependency>
为什么写测试代码需要把下面这行删掉?因为这是作用范围,
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<!-- <scope>test</scope>-->
</dependency>
2.3第一种模型(直连)
在上图的模型中,有以下概念:
P:生产者,也就是要发送消息的程序
C:消费者:消息的接受者,会-直等待消息到来。
queue:消息队列,图中红色部分。类似一个邮箱,可以缓存消息;生产者向其中投递消息,消费者从其中取出消息。
1.开发生产者
public class Provider {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
// 创建到服务器的连接
ConnectionFactory factory = new ConnectionFactory();
// 连接rabbitmq主机
factory.setHost("192.168.231.141");
// 设置端口号
factory.setPort(5672);
// 设置连接那个虚拟主机
factory.setVirtualHost("/ems");
// 设置访问虚拟主机的用户名和密码
factory.setUsername("ems");
factory.setPassword("123456");
// 获取连接对象
try (Connection connection = factory.newConnection();
// 获取连接中的通道对象
Channel channel = connection.createChannel()) {
// 通道绑定对应消息队列
// 参数1.队列名 如果队列不存在,自动创建
// 2. durable 用来定义队列的特性是否要持久化 true 持久化
// 3. 是否独占队列 true独占
// 4. 是否在消费完成后,自动删除队列, true 自动删除
// 5. 额外参数
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "Hello World!";
// 发布消息
// 1.交换机名称,因为没有交换机,所以为空
// 2.队列名
// 3.发布消息时的属性|传递消息的额外设置
// 4.发布消息的具体内容,要求是字节类型的数组,
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
}
}
}
|
最新内容
相关内容
python如何读取列表中元素的位置?
python如何读取列表中元素的位置?,位置,数据,异常,培训,字符串,元素,索引,方法,示例,结果,python读取列表中元素位置的方法:1、使用index()方python支持r语言吗?
python支持r语言吗?,代码,名称,培训,官网,第一,语言,对象,字符串,方法,后缀,python中可以支持r语言。python提供了一个模块rpy2,可以较好地完python怎么使用文件夹下的脚本?
python怎么使用文件夹下的脚本?,工作,培训,文件夹,脚本,文件,所在,方法,示例,路径,以上,python中使用文件夹下脚本的方法:将当前的工作目录(即python的三角函数在哪?
python的三角函数在哪?,标准,培训,函数,反函数,方法,下面,以上,更多,内容,python中的三角函数在python的标准库math中,math已经包含在你的标python中获取路径的三种方法
python中获取路径的三种方法,工作,代码,情况,培训,下来,路径,文件,也就是,桌面,目录,python中获取路径总结下来分为三种情况:1、获取工作目录python如何调用另一个文件夹中的内
python如何调用另一个文件夹中的内容?,系统,培训,文件,模块,内容,路径,函数,所在,前缀,语句,python中调用另外一个文件夹中的内容:1、同一文件python怎么找出所有的数字?
python怎么找出所有的数字?,数字,培训,代码,小数点,小数,字符串,整数,表达式,含义,思路,python中获取字符串中所有数字的方法:1、使用正则表达Python怎么取出列表中的相邻元素?
Python怎么取出列表中的相邻元素?,代码,异常,培训,元素,指针,序列,对象,表示,语句,函数,1、python的迭代器。iter()能把一个序列生成为一个和Python慢的重要原因
Python慢的重要原因,信息,培训,语言,编译器,整数,操作,程序,解释性,速度,原因,1、python是动态性语言不是静态性语言在python程序执行的时候,Python和人工智能的关系
Python和人工智能的关系,人工智能,支柱,培训,设计,原因,语言,关系,地利,易学,原型,其实,简单来说,Python是最适合人工智能开发的编程语言。原因centos如何安装python的ide?
centos如何安装python的ide?,环境,培训,方法,下面,以上,更多,内容,centos安装pythonIDE的方法:python常用的集成开发环境IDE1:Eclips+PyDevIpython写界面的流行库
python写界面的流行库,平台,标准,庞大,培训,图形,界面,兼容性,用户界面,仓库,新手入门,python写界面的流行库:1.TkinterTkinter是图形用户界面