RabbitMQ消息队列(三) ——Hello World

  本文将使用Java语言,实现从Producer到Consumer传递数据”Hello, World“。

  首先复习一下上篇所学:RabbitMQ实现了AMQP定义的消息队列。它实现的功能”非常简单“:从Producer接收数据然后传递到Consumer。它能保证多并发,数据安全传递,可扩展。

     和任何的Hello world一样,它们都不复杂。我们将会设计两个程序,一个发送Hello world,另一个接收这个数据并且打印到屏幕。
      整体的设计如下图:



1. 建立maven项目

pom.xml配置

<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.wb.rabbitmq</groupId>
  <artifactId>rabbitmq</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
      <dependency>
        <groupId>com.rabbitmq</groupId>
        <artifactId>amqp-client</artifactId>
        <version>3.0.4</version>
    </dependency>
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
    </dependency>
  </dependencies>
</project>

2. Sending

第一个程序 Send.java:发送Hello world 到queue。正如我们在上篇文章提到的,你程序的第一句话就是建立连接,第二句话就是创建channel:

 

package com.wb.rabbitmq.demo2;
 
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
 
public class Send {
 private static final String QUEUE_NAME = "hello";// 消息队列名称
 
 public static void main(String[] argv) throws java.io.IOException {
 
  ConnectionFactory factory = new ConnectionFactory();// 创建RabbitMQ连接工厂
  factory.setHost("localhost");// RabbitMQ服务器IP地址,若在本地安装,则为localhost
  Connection connection = factory.newConnection();// 创建RabbitMQ连接
  Channel channel = connection.createChannel();// 创建RabbitMQ连接channel
 
  channel.queueDeclare(QUEUE_NAME, false, false, false, null);
  String message = "Hello World!";// 传送的消息
  channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
  System.out.println(" [x] Sent '" + message + "'");
 
  // 调用完毕,别忘记关闭channel、connection
  channel.close();
  connection.close();
 }
}

 

3. Receiving

第二个程序 receive.py 将从queue中获取Message并且打印到屏幕。

第一步还是创建connection。第二步创建channel。第三步创建queue,name = hello:

 

package com.wb.rabbitmq.demo2;

import java.io.IOException;

import com.rabbitmq.client.AMQP;
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;

public class Recv {
    private final static String QUEUE_NAME = "hello";// 队列名称,与发送方保持一致

    public static void main(String[] argv) throws java.io.IOException, java.lang.InterruptedException {

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
        Consumer consumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
                    byte[] body) throws IOException {
                String message = new String(body, "UTF-8");
                System.out.println(" [x] Received '" + message + "'");
            }
        };
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
}

 

4. 验证

  1、先运行Send.java,生产消息

  2、登录http://localhost:15672/  默认账号密码:guest,查看是否发到消息队列中

  3、运行Rec.java,消费消息

 

 

 

参考文献:

1. http://www.rabbitmq.com/tutorials/tutorial-one-java.html

2. http://blog.csdn.net/anzhsoft/article/details/19570187

posted @ 2017-09-18 15:03  BinMax。  阅读(166)  评论(0编辑  收藏  举报