rabbitmq-java生产者消费者
生活随笔
收集整理的這篇文章主要介紹了
rabbitmq-java生产者消费者
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【README】
本文使用java 連接rabbitmq,模擬生產者,消費者場景
?
【1】項目搭建
1)maven項目,依賴
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hello</groupId><artifactId>rabbitmqtest</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.11.0</version></dependency></dependencies> </project>2)生產者
package com.hello.rabbitmqtest.simple;import com.hello.trong.rabbitmqtest.util.MyDateUtil; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory;public class Producer {/*** 隊列名稱 */static final String QUEUE_NAME = "simple_queue2";public static void main(String[] args) throws Exception {// 創建連接工廠 ConnectionFactory connFactory = new ConnectionFactory();// 主機地址,默認為 localhostconnFactory.setHost("192.168.163.201");;connFactory.setPort(5672);// 設置虛擬主機 // connFactory.setVirtualHost("/hello");// 設置賬號密碼 connFactory.setUsername("guest");connFactory.setPassword("guest");// 創建連接Connection conn = connFactory.newConnection();// 創建頻道Channel channel = conn.createChannel();/*** 創建隊列* 隊列名稱, 是否持久化隊列,是否獨占本次連接,是否在不使用的時候自動刪除隊列, 隊列其他參數; */channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 發送消息 String message = "【simple_queue2】 hello rabbitmq now is " + MyDateUtil.getNow();channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));System.out.println("生產者發送消息" + message);// 關閉通道和連接channel.close();conn.close(); } } // 日期工具類 public class MyDateUtil {public static void main(String[] args) {}public static String getNow() {return getNow("yyyy-MM-dd hh:mm:ss.SSS");}public static String getNow(String format) {SimpleDateFormat formater = new SimpleDateFormat(format);String dateFormated = formater.format(new Date());return dateFormated; } }3)消費者
package com.hello.rabbitmqtest.simple;import java.io.IOException;import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; import com.rabbitmq.client.AMQP.BasicProperties;/*** rabbitmq 消費者*/ public class MyConsumer {/*** 隊列名稱 */static final String QUEUE_NAME = "simple_queue2";public static void main(String[] args) throws Exception {// 創建連接工廠 ConnectionFactory connFactory = new ConnectionFactory();// 主機地址,默認為 localhostconnFactory.setHost("192.168.163.201");;connFactory.setPort(5672);// 設置虛擬主機connFactory.setVirtualHost("/");// 設置賬號密碼 connFactory.setUsername("guest");connFactory.setPassword("guest");// 創建連接Connection conn = connFactory.newConnection();// 創建頻道Channel channel = conn.createChannel();// 聲明要關注的隊列 channel.queueDeclare(QUEUE_NAME, false, false, false, null);System.out.println("customer wait to receive message");// 告訴服務器,我們需要哪個頻道的角色,如果頻道中有消息,就會執行回調函數 handleDeliveryConsumer consumer = new DefaultConsumer(channel) {/*** @param consumerTag 消費者標簽,在 channel.basicConsume 可以指定 * @param envelope 消息包內容,包括消息id,消息routingkey,交換機,消息和重轉標記(收到消息失敗后是否需要重新發送) * @param properties 基本屬性* @param body 消息字節數組 */@Overridepublic void handleDelivery(String consumerTag, Envelope envelope,BasicProperties properties, byte[] body) throws IOException {System.out.println("路由key=" + envelope.getRoutingKey());System.out.println("交換機=" + envelope.getExchange());System.out.println("消息id=" + envelope.getDeliveryTag()); String message = new String(body, "UTF-8");System.out.println(String.format("消費者收到的消息【%s】", message)); System.out.println("============================================="); } };// 自動恢復隊列應答 -- rabbitmq中的消息確認機制 channel.basicConsume(QUEUE_NAME, true, consumer); } }【2】 測試效果
// 生產者 生產者發送消息【simple_queue2】 hello rabbitmq now is 2021-02-28 12:01:23.926// 消費者 路由key=simple_queue2 交換機= 消息id=3 消費者收到的消息【【simple_queue2】 hello rabbitmq now is 2021-02-28 12:01:23.926】 ============================================= 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的rabbitmq-java生产者消费者的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么区分模板网站(怎么区分模板网站类型)
- 下一篇: 下载的网站模板怎么使用(下载的网站模板怎