Rabbitmq消息隊列(二) Hello World! 模擬簡單發送接收


1、簡介

  RabbitMQ是消息代理:它接受和轉發消息。你可以把它當作一個郵局:當你把你要郵寄的郵件放在信箱里時,你可以肯定Postman先生最終會把郵件送到你的收件人那里。在這個比喻中,RabbitMQ是郵局,郵局郵差。RabbitMQ和郵局之間的主要區別是,它不處理紙張,而是接受、存儲和轉發二進制數據‒消息。

  整體的設計如下圖:

  

  java環境下,使用rabbitmq需要用到jar包:amqp-client.jar

 

2、發送消息

  想要將消息發送到隊列中,我們需要進行下面幾步:

  (1)建立服務鏈接

1 ConnectionFactory factory = new ConnectionFactory();
2 factory.setHost("localhost");                // 設置ip地址 
3 factory.setPort(5672);                         // rabbit的端口號,默認為5672,可以不寫
4 factory.setPassword("rabbit");             // 發送消息用戶的登錄密碼
5 factory.setUsername("rabbit");           // 發送消息用戶的登錄用戶名
6 Connection connection = factory.newConnection();        // 新建鏈接
7 Channel channel = connection.createChannel();            // 創建channel

  (2)聲明消息隊列

1 channel.queueDeclare("QUEUE_NAME", false, false, false, null);

  (3)調用方法發送消息

1 String message = "Hello World!";                    // 待發送的消息
2 channel.basicPublish("", QUEUE_NAME, null, message.getBytes());

  (4)發送消息過后,需要關閉鏈接

1 channel.close();
2 connection.close();

 

 

3、接收消息

  接下來,當生產者將消息發送到隊列之后,我們消費者一方就可以從隊列中接收到消息了:

  (1)建立服務器鏈接,和生產者一方一樣

1 ConnectionFactory factory = new ConnectionFactory();
2 factory.setHost("localhost");                // 設置ip地址 
3 factory.setPort(5672);                         // rabbit的端口號,默認為5672,可以不寫
4 factory.setPassword("rabbit");             // 發送消息用戶的登錄密碼
5 factory.setUsername("rabbit");           // 發送消息用戶的登錄用戶名
6 Connection connection = factory.newConnection();        // 新建鏈接
7 Channel channel = connection.createChannel();            // 創建channel

  (2)聲明消息隊列

1 channel.queueDeclare("QUEUE_NAME", false, false, false, null);

 

  (3)聲明回調方法,接收服務器從隊列中發過來的消息

 1 Consumer consumer = new DefaultConsumer(channel) {
 2   @Override
 3   public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
 6     String message = new String(body, "UTF-8");
 7     System.out.println(" [x] Received '" + message + "'");
 8   }
 9 };
10 channel.basicConsume(QUEUE_NAME, true, consumer);

 

    

4、運行查看結果

  分別運行生產者方和消費者方的代碼過后,通過生產者方發送消息過后,就可以在消費者方接收到發送過來的數據了。

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com