RabbitMQ Hello World

直接先贴代码

//Send.java
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;

public class Send {
	
  private final static String QUEUE_NAME = "hello";

  public static void main(String[] argv) throws Exception {
      	      
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("localhost");
    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    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.close();
    connection.close();
  }
}
     在main方法中,首先new了一个ConnectionFactory factory=new ConnectionFactory(),这个ConnectFactory是一个Connection"生产工厂",可以new出Connection出来。然后这个factory设置了一个host,由于在本地测试,所以选择了localhost作为host地址。然后new了一个Connection  Connection connection =factory.newConnection(),这是定义了一个RabbitMQ中的connection,你可以将其看成是一个TCP连接,其实质也就是一个TCP连接。在connection的基础上create了一个Channel。connection和Channel是RabbitMQ里重要概念之一。前面这4段代码是基础代码中的基础代码。

      RabbitMQ中有3个重要概念:producing生产者,可以理解为Sender,即Message发送者,consuming,消费者,即信息接收者Receiver。queue队列,可以理解为消息队列,是连接producingconsuming之间的连接器,还有一个概念是exchange,这个exchange可以连接为一个分发器或者说路由器router,exchange决定了Message发送到哪个queue里。

     channel queueDeclare(QUEUE_NAME, false,false,false,null),这里做了queue申明。这里什么的queue有一个String类似的名称QUEUE_NAME,这个queue需要在P端和C端都申明一下,同一个queue name的才能够进行Message的传递。

     chanel.basicPublish("",QUEUE_NAME,null message.getByte()) 这个代码就是将message内容发送到了队列queue里面了。

     完事之后滚比channel和connection。

//Recv.java
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.QueueingConsumer;

public class Recv {
	
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws Exception {

    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");
    
    QueueingConsumer consumer = new QueueingConsumer(channel);
    channel.basicConsume(QUEUE_NAME, true, consumer);
    
    while (true) {
      QueueingConsumer.Delivery delivery = consumer.nextDelivery();
      String message = new String(delivery.getBody());
      System.out.println(" [x] Received '" + message + "'");
    }
  }
}
      在Consuming端接收Message,同样的创建了ConnectionFactory Connection Channel ,申明declare了queue。

      然后new了一个QueueingConsumer consumer=new QueueingConsumer(channel)

      QueueingConsumer是一个buffer,里面存储了Message

      在一个死循环中一直接收Message,在while(true)中定义了QueueConsumer.Delivery delivery=consumer.nextDelivery();然后在delivery中取出mesage内容body:delivery.getBody()。

      在while循环中QueueingConsumer.nextDelivery()会一直阻塞,一直等到下一个message被delivery过来。



版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-03-26 17:03  mooreliu  阅读(176)  评论(0编辑  收藏  举报