当前位置: 首页 > 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/41939.html

相关文章:

  • 营销型网站重要性网站建设的知识点有哪些
  • 充值网站制作邯郸移动网站制作
  • 做期货主要看哪几个财经网站企业网站建设的要求
  • 做网站怎样上传文件网站建设高效解决之道
  • app手机电视网站设计方案购物便宜的网站有哪些
  • 网站建设创业计划书模板范文国内f型网页布局的网站
  • 手机上传视频网站开发哪些网站做的美
  • 网站备案需要什么资料台州公司建站模板
  • 郑州网站建设老牌公司一流高职院校建设专题网站
  • 做品牌推广用什么网站用wordpress制作网站模板下载
  • 网站秒收录工具wordpress添加新的小工具
  • 插画师个人网站是怎么做的个人网站免费源码大全
  • 公司办网站大概多少钱wordpress会员投稿
  • 昆山网站建设多少钱装潢设计图
  • 无形资产 网站开发网站导航条模板
  • 海口商城网站建设商城平台建设
  • 个人网页设计制作网站模板云南网站建设
  • 房屋出租网站模板深圳设计公司上市成功有几家
  • 兼职做网站有没有专门做花鸟鱼虫的网站
  • 承接网站建设广告语wordpress怎样添加左侧菜单的功能
  • 网站的建设心得本周热点事件
  • 建网站的公司哪个好her123 wordpress
  • 北京手机网站开发价格有代做医学统计图的网站吗
  • 网站制作工作流程企业计划书怎么写
  • 做公司网站解析搜索引擎优化通常要注意的问题有( )
  • 沧州企业网站专业定制wordpress文章列表主题
  • 医疗行业企业网站建设设计网址有哪些
  • 网站seo站外优化wordpress site
  • 网站上线的步骤公司oa办公平台
  • 徐州网站平台制作公司河北建设工程招标网