- JDK版本为15(1.8+即可)
- amqp-client 5.10.0
<!--ribbitMq--><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.10.0</version></dependency>4.1 Work queues(工作队列)官方描述:工作队列(又名:任务队列)背后的主要思想是避免立即执行资源密集型任务,并且必须等待它完成 。相反,我们把任务安排在以后完成 。我们将任务封装为消息并将其发送到队列 。后台运行的工作进程将弹出任务并最终执行作业 。当您运行多个worker时,任务将在它们之间共享 。
代码示例:
生产者:
1 public class NewTask { 23private static final String TASK_QUEUE_NAME = "task_queue"; 45public static void main(String[] args) throws Exception{ 67ConnectionFactory factory = new ConnectionFactory(); 89// 设置IP10factory.setHost("127.0.0.1");11 12// 设置端口号13factory.setPort(5672);14 15try (Connection connection = factory.newConnection();16Channel channel = connection.createChannel()){17channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);18 19String message = String.join(" ", "four");20 21channel.basicPublish("", TASK_QUEUE_NAME,22MessageProperties.PERSISTENT_TEXT_PLAIN,23message.getBytes(StandardCharsets.UTF_8));24 25System.out.println(" [x] Sent '" + message + "'");26}27}28 }消费者: 1 public class Worker { 23private static final String TASK_QUEUE_NAME = "task_queue"; 45public static void main(String[] args )throws Exception { 67ConnectionFactory factory = new ConnectionFactory(); 89// 设置IP10factory.setHost("127.0.0.1");11 12// 设置端口号13factory.setPort(5672);14 15final Connection connection = factory.newConnection();16final Channel channel = connection.createChannel();17 18channel.queueDeclare(TASK_QUEUE_NAME, true, false,false,null);19System.out.println(" [*] Waiting for messages. To exit press CTRL+C");20 21channel.basicQos(1);22 23DeliverCallback deliverCallback = (comsumerTag, delivery) ->{24String message = new String(delivery.getBody(), StandardCharsets.UTF_8);25 26System.out.println(" [x] Received '" + message + "'");27 28try {29doWork(message);30} finally {31System.out.println("[x] Done");32channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);33}34};35channel.basicConsume(TASK_QUEUE_NAME, false, deliverCallback, comsumerTag -> {});36}37 38private static void doWork(String task){39for (char ch : task.toCharArray()){40if(ch == '.'){41try {42Thread.sleep(1000);43} catch (InterruptedException e) {44Thread.currentThread().interrupt();45}46}47}48}49 }4.3 Publish/Subscribe(发布/订阅)官方描述:RabbitMQ消息传递模型中的核心思想是生产者从不将任何消息直接发送到队列 。实际上,生产者经常甚至根本不知道是否将消息传递到任何队列 。相反,生产者只能将消息发送到
推荐阅读
- 盗墓笔记里的汪家人是什么来历 盗墓笔记里的汪家人到底是什么人啊
- 端午节吃什么传统美食 端午节要吃些什么
- 朱元璋和陈友谅兵力对比 陈友谅打洪都守将是
- 这可能是网上最全的 Docker 工具集合
- 六安瓜片是怎么来的,六安瓜片的存储方法
- 白纸板是什么,白茶是什么茶品种
- 500元以内什么蓝牙耳机好?五大性价比高的蓝牙耳机推荐
- 白茶是什么样的茶,什么样的翡翠好
- 摆擂台煮茶论英雄,煮茶适合什么环境
- 绿茶是红茶还是绿茶,如何根据体质季节喝茶
