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

制作 网站 盈利青岛专业餐饮网站制作

制作 网站 盈利,青岛专业餐饮网站制作,郴州网站建设软件定制开发制作,装修公司加盟合作模式在现代分布式系统中#xff0c;消息队列#xff08;Message Queue#xff09;是实现异步通信和解耦系统的关键组件之一。RabbitMQ 是一个广泛使用的开源消息代理软件#xff0c;支持多种消息传递模式。其中#xff0c;Work Queues#xff08;工作队列#xff09;模式是一…在现代分布式系统中消息队列Message Queue是实现异步通信和解耦系统的关键组件之一。RabbitMQ 是一个广泛使用的开源消息代理软件支持多种消息传递模式。其中Work Queues工作队列模式是一种常见的模式用于在多个消费者之间分配任务从而实现负载均衡和提高系统的处理能力。下面将详细介绍 RabbitMQ 中的 Work Queues 模式。 1. 什么是 Work Queues 模式 Work Queues 模式也称为任务队列模式是一种消息传递模式用于在多个消费者之间分配任务。在这种模式下生产者将任务消息发送到队列中多个消费者从队列中获取任务并进行处理。每个任务只会被一个消费者处理从而实现负载均衡。 Work Queues 模式的主要优点包括 负载均衡多个消费者可以并行处理任务从而提高系统的处理能力。解耦生产者和消费者之间通过队列进行通信彼此之间不需要直接交互。异步处理任务可以异步处理生产者不需要等待任务完成即可继续执行其他操作。 2. Work Queues 模式的工作原理 2.1 生产者Producer 生产者负责将任务消息发送到队列中。生产者不需要知道有多少消费者会处理这些任务只需要将任务发送到队列即可。 2.2 队列Queue 队列是消息的缓冲区用于存储生产者发送的任务。队列可以有多个消费者但每个任务只会被一个消费者处理。 2.3 消费者Consumer 消费者从队列中获取任务并进行处理。多个消费者可以并行处理任务从而实现负载均衡。消费者可以是独立的进程、线程或服务。 2.4 消息确认Message Acknowledgment 为了确保任务能够可靠地处理RabbitMQ 提供了消息确认机制。消费者在处理完任务后需要向 RabbitMQ 发送确认消息告知任务已经处理完成。如果消费者在处理任务时崩溃RabbitMQ 会将未确认的任务重新分配给其他消费者。 2.5 公平分发Fair Dispatch 默认情况下RabbitMQ 会按顺序将任务分发给消费者。然而如果某些消费者处理任务的速度较慢可能会导致任务堆积。为了避免这种情况可以使用 basicQos 方法设置预取计数prefetch count限制每个消费者一次可以获取的任务数量从而实现更公平的分发。 3. 环境准备 在开始之前确保你已经安装了以下环境 Java 开发环境JDK 8 或更高版本RabbitMQ 服务器已启动并运行Maven用于管理依赖 3.1 添加依赖 首先在你的项目中添加 RabbitMQ 客户端库的依赖。如果你使用的是 Maven可以在 pom.xml 中添加以下依赖 dependencygroupIdcom.rabbitmq/groupIdartifactIdamqp-client/artifactIdversion5.20.0/version /dependency4. 代码案例 4.1 生产者代码 生产者负责将任务发送到队列。以下是一个简单的生产者代码示例 import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory;import java.io.IOException; import java.util.concurrent.TimeoutException;public class Producer {private static final String QUEUE_NAME work_queues;public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {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, true, false, false, null);//4.将消息发送到队列for (int i 1; i 10; i) {String message Task to be processed, i;channel.basicPublish(, QUEUE_NAME, null, message.getBytes());System.out.println( [x] Sent message );}}} } 代码解释 ConnectionFactory: 用于创建与 RabbitMQ 服务器的连接。Connection: 表示与 RabbitMQ 服务器的物理连接。Channel: 表示与 RabbitMQ 服务器的逻辑连接用于发送和接收消息。queueDeclare: 声明一个队列true 表示队列是持久的。basicPublish: 将消息发布到队列使用默认交换机空字符串。 4.2 消费者代码 消费者负责从队列中获取任务并处理。以下是一个简单的消费者代码示例 import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.DeliverCallback;import java.io.IOException; import java.util.concurrent.TimeoutException;public class Consumer {private static final String QUEUE_NAME work_queues;public static void main(String[] args) throws IOException, TimeoutException {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();channel.queueDeclare(QUEUE_NAME, true, false, false, null);System.out.println( [*] Waiting for messages. To exit press CTRLC);channel.basicQos(1); // 每次只处理一个消息DeliverCallback deliverCallback (consumerTag, delivery) - {String message new String(delivery.getBody(), UTF-8);System.out.println( [x] Received message );try {doWork(message);} finally {System.out.println( [x] Done);//手动ack,因为不同的机器处理速度不一样,因此不同的机器会在不同时间应答,这样机器就可以根据实际能力处理了channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);}};channel.basicConsume(QUEUE_NAME, false, deliverCallback, consumerTag - { });}private static void doWork(String task) {for (char ch : task.toCharArray()) {if (ch .) {try {Thread.sleep(1000);} catch (InterruptedException _ignored) {Thread.currentThread().interrupt();}}}} }代码解释 basicQos(1): 设置每次只处理一个消息确保任务的公平分配。DeliverCallback: 定义消息处理逻辑doWork 方法模拟任务处理过程。basicAck: 确认消息处理完成从队列中移除消息。 5. 运行示例 启动 RabbitMQ 服务器确保 RabbitMQ 服务器已启动并运行。运行多个消费者启动多个消费者实例确保它们连接到同一个队列。运行生产者启动生产者实例发送任务到队列。 示例输出 生产者输出 [x] Sent Task to be processed, 1[x] Sent Task to be processed, 2[x] Sent Task to be processed, 3[x] Sent Task to be processed, 4[x] Sent Task to be processed, 5[x] Sent Task to be processed, 6[x] Sent Task to be processed, 7[x] Sent Task to be processed, 8[x] Sent Task to be processed, 9[x] Sent Task to be processed, 10消费者1输出 [*] Waiting for messages. To exit press CTRLC[x] Received Task to be processed, 1[x] Done[x] Received Task to be processed, 4[x] Done[x] Received Task to be processed, 6[x] Done[x] Received Task to be processed, 8[x] Done[x] Received Task to be processed, 10[x] Done消费者2输出 [*] Waiting for messages. To exit press CTRLC[x] Received Task to be processed, 2[x] Done[x] Received Task to be processed, 3[x] Done[x] Received Task to be processed, 5[x] Done[x] Received Task to be processed, 7[x] Done[x] Received Task to be processed, 9[x] Done6. 总结 本文详细介绍了如何在 RabbitMQ 中实现 Work Queues 模式包括生产者、默认交换机、队列和多个消费者的设计与实现。通过使用 RabbitMQ 的 Java 客户端库我们可以轻松地实现任务的分配和处理。Work Queues 模式非常适合需要将任务分配给多个消费者处理的场景如任务调度、日志处理等。
http://www.dnsts.com.cn/news/66880.html

相关文章:

  • 青岛网站排名方案设计网站策划书
  • 用node和vue做的网站北京网站制作推广
  • 平邑网站开发嘉纪商正网站建设公司
  • 注入漏洞网站源码济宁网站建设 智雅
  • 网站建设维护费 会计科目阿里云企业网站备案流程
  • steam做皮肤网站php网站开发中如何
  • 大量网站开发视频 文档VIP资源备案修改网站名称
  • 电子方案网站建设方案wordpress theme free
  • 网站流量一直做不起来南昌网站建设的流程
  • 做网站书内网网站建设
  • 看网站是不是WP做的wordpress给指定用户设置角色
  • 建网站要会什么wordpress 注册验证
  • 建设银行手机银行登录网站wordpress中文下载方法
  • 大气集团企业网站模板微信推广多少钱一次
  • 哪些网站可以做画赚钱战队头像logo免费自动生成器
  • 博客网站开发框架云虚拟主机发布wordpress
  • 菏泽网站建设电话宁波市建设工程造价信息
  • 大型网站制作公司飞数设置wordpress文章标题高亮的代码
  • 20个外国平面设计网站朋友圈广告投放
  • 中文网站模板 免费非响应式网站优点
  • 做app和网站哪个比较好地方生活门户网站名称
  • 上虞网站设计如何建造免费的网站
  • 做网站如何自动采集图片淘宝支持做微交易网站吗
  • 网站建设和电商区别免费科技
  • 网站图片上传不上去怎么办自己做的网站怎么传入外网
  • 网站文章好几天不收录如何开发一个软件平台
  • 深圳维特网站建设一点号自媒体平台
  • 网站建设公司业务提成多少网站建设淘宝走流程
  • 宿州网站制作建设网站建设文化服务公司
  • 娱乐网站建设怎么样wordpress exploit scanner