其他分享
首页 > 其他分享> > 第3章 Work Queues

第3章 Work Queues

作者:互联网

  工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。 相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进 程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。

3.1. 轮训分发消息

  在这个案例中我们会启动两个工作线程,一个消息发送线程,我们来看看他们两个工作线程 是如何工作的。

3.1.1.抽取工具类

public class RabbitMqUtils {
 //得到一个连接的 channel
 public static Channel getChannel() throws Exception{
 //创建一个连接工厂
 ConnectionFactory factory = new ConnectionFactory();
 factory.setHost("182.92.234.71");
 factory.setUsername("admin");
 factory.setPassword("123");
 Connection connection = factory.newConnection();
 Channel channel = connection.createChannel();
 return channel;
 } 
}

3.1.2.启动两个工作线程

public class Worker01 {
 private static final String QUEUE_NAME="hello";
 public static void main(String[] args) throws Exception {
 Channel channel = RabbitMqUtils.getChannel();
 DeliverCallback deliverCallback=(consumerTag,delivery)->{
 String receivedMessage = new String(delivery.getBody());
 System.out.println("接收到消息:"+receivedMessage);
 };
 CancelCallback cancelCallback=(consumerTag)->{
 System.out.println(consumerTag+"消费者取消消费接口回调逻辑");
 };
 System.out.println("C2 消费者启动等待消费......");
 channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);
 } 
}

 

 

 

3.1.3.启动一个发送线程 

public class Task01 {
 private static final String QUEUE_NAME="hello";
 public static void main(String[] args) throws Exception {
   try(Channel channel=RabbitMqUtils.getChannel();) {
     channel.queueDeclare(QUEUE_NAME,false,false,false,null);
     //从控制台当中接受信息
     Scanner scanner = new Scanner(System.in);
     while (scanner.hasNext()){
       String message = scanner.next();
       channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
       System.out.println("发送消息完成:"+message);
     }
   }
 } 
}

3.1.4.结果展示 

 

 

 

 

标签:String,Queues,Work,System,线程,static,public,channel
来源: https://www.cnblogs.com/RobertYu666/p/16269463.html