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 + "'");
}
}
}
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h65212.shtml