当前位置: 首页 > news >正文

香港 网站空间网站收录查询平台

香港 网站空间,网站收录查询平台,电子商务静态网站建设心得,tint-k主题做企业网站RabbitMQ是一个广泛使用的开源消息代理软件,它实现了高级消息队列协议(AMQP)。RabbitMQ支持多种消息传递模式,其中最基本的是点对点(Point-to-Point)通讯方式。在这种模式下,消息生产者将消息发…

RabbitMQ是一个广泛使用的开源消息代理软件,它实现了高级消息队列协议(AMQP)。RabbitMQ支持多种消息传递模式,其中最基本的是点对点(Point-to-Point)通讯方式。在这种模式下,消息生产者将消息发送到一个队列,而消息消费者从该队列中接收消息。每个消息只会被一个消费者消费一次。

下面将通过一个简单的Java代码案例,详细介绍如何在RabbitMQ中实现点对点通讯。

1. 原理分析

  • 一个生产者,一个默认的交换机,一个队列,一个消费者
  • 看起来是生产者直接发送到队列,实际上是发送到了默认交换机

在这里插入图片描述

结构图:

在这里插入图片描述

2. 环境准备

在开始之前,请确保你已经安装了以下环境:

  • Java Development Kit (JDK) 8 或更高版本
  • Apache Maven
  • RabbitMQ 服务器

你可以通过以下命令检查Java和Maven的安装情况:

java -version
mvn -version

3. 添加RabbitMQ依赖

首先,我们需要在Maven项目中添加RabbitMQ的Java客户端依赖。在你的pom.xml文件中添加以下内容:

<dependencies><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.20.0</version></dependency>
</dependencies>

4. 创建消息生产者

接下来,我们创建一个消息生产者,它将消息发送到RabbitMQ的队列中。

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;public class MessageProducer {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {// 创建连接工厂ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.200.138");factory.setPort(5672);factory.setVirtualHost("/test");factory.setUsername("test");factory.setPassword("test");// 创建连接和通道try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {// 声明队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 发送消息String message = "Hello World!aaa";// 发布消息到exchange,同时指定路由的规则// 参数1:指定exchange,使用""。代表默认交换机// 参数2:指定路由的规则,使用具体的队列名称。// 参数3:指定传递的消息所携带的properties,使用null。// 参数4:指定发布的具体消息,byte[]类型channel.basicPublish("", QUEUE_NAME, null, message.getBytes());// Ps:exchange是不会帮你将消息持久化到本地的,Queue才会帮你持久化消息。System.out.println(" [x] Sent '" + message + "'");}}
}

代码解析:

  1. ConnectionFactory: 用于创建到RabbitMQ服务器的连接。
  2. Connection: 代表与RabbitMQ服务器的物理连接。
  3. Channel: 用于发送和接收消息的通道。
  4. queueDeclare: 声明一个队列,如果队列不存在,则会创建它。
  5. basicPublish: 将消息发送到指定的队列。

默认交换机上可以看到生产者发送的消息:

在这里插入图片描述

5. 创建消息消费者

接下来,我们创建一个消息消费者,它将从RabbitMQ的队列中接收消息。

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;public class MessageConsumer {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {// 创建连接工厂ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.200.138");factory.setPort(5672);factory.setVirtualHost("/test");factory.setUsername("test");factory.setPassword("test");// 创建连接和通道Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 声明队列//参数1:queue - 指定队列的名称//参数2:durable - 当前队列是否需要持久化(true)//参数3:exclusive:是否排外的,有两个作用://      一:当连接关闭时connection.close()该队列是否会自动删除;//      二:该队列是否是私有的private,如果不是排外的,可以使用两个消费者都访问同一个队列,没有任何问题,//          如果是排外的,会对当前队列加锁,其他通道channel是不能访问的,如果强制访问会报异常://          com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=405, reply-text=RESOURCE_LOCKED - cannot obtain exclusive access to locked queue 'queue_name' in vhost '/', class-id=50, method-id=20)//          一般等于true的话用于一个队列只能有一个消费者来消费的场景//参数4:autoDelete - 如果这个队列没有消费者在消费,并且所有消息都消费完,队列自动删除//参数5:arguments - 指定当前队列的其他信息channel.queueDeclare(QUEUE_NAME, false, false, false, null);System.out.println(" [*] Waiting for messages. To exit press CTRL+C");// 设置消息回调DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), "UTF-8");System.out.println(" [x] Received '" + message + "'");};// 开始消费消息channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });}
}

代码解析:

  1. DeliverCallback: 用于处理接收到的消息的回调函数。
  2. basicConsume: 开始消费队列中的消息。

6. 运行代码

  1. 首先启动RabbitMQ服务器。
  2. 运行MessageProducer类,发送消息。
  3. 运行MessageConsumer类,接收消息。

你应该会看到类似以下的输出:

Producer Output:

 [x] Sent 'Hello World!'

Consumer Output:

 [*] Waiting for messages. To exit press CTRL+C[x] Received 'Hello World!'

7. 总结

通过以上步骤,我们成功地在RabbitMQ中实现了点对点通讯。消息生产者将消息发送到队列,而消息消费者从队列中接收消息。这种模式非常适合需要确保消息只被一个消费者处理一次的场景。

http://www.sczhlp.com/news/29051/

相关文章:

  • 网站推广优化外包公司网站的网站建设
  • 2025年8月22日
  • blogtraining
  • Oracle19c在OEL7.9下的单机安装
  • 网站解析怎么做seo sem是什么
  • 广州今日一线新闻seo怎么优化关键词排名培训
  • 小加工厂做网站如何让自己的网站快速被百度收录
  • 佛山网站快速优化排名seo网站排名优化价格
  • 怎么看网站关键词排名百度推广充值必须5000吗
  • 建设一个大型网站大概费用真正永久免费网站建设
  • 佛山响应式网站seo全网营销公司
  • 有哪些游戏可以做网站外贸网站平台
  • dw cs6asp.net网站建设windows优化大师在哪里
  • 阿里云备案个人可以做网站吗网优工程师前景和待遇
  • P3067 [USACO12OPEN] Balanced Cow Subsets G
  • 区间dp CF2129D
  • 电商网站制作方案百度指数是什么
  • 工厂订单外发代加工外发加工网黄山seo
  • 网站建设 日志独立站seo怎么做
  • 网站排名优化效果推广怎么做才可以赚钱
  • 集约化网站群建设内容站长网站查询
  • 电脑网站素材网站外链推广平台
  • gl账号注册网站企业培训考试系统app
  • wordpress插件残留seo与sem的区别
  • 给大家推荐一个免费的智能编码助手---通义灵码
  • 引入 pinia-plugin-persist 报错
  • 为什么要网站备案100个成功营销案例
  • 徐州网站制作哪家好seosem顾问
  • 云南百度公司seo网络营销技巧
  • 网站建设与管理教程视频教程网络推广是啥