• RabbitMQ 入门 Helloworld


    1、Windows下RabbitMQ的安装

      下载Erlang,地址:http://www.erlang.org/download/otp_win32_R15B.exe ,双击安装即可(首先装)

      下载RabbitMQ,地址:http://www.rabbitmq.com/releases/rabbitmq-server/v3.3.4/rabbitmq-server-3.3.4.exe ,双击安装即可

      下载rabbit-client.jar ,Java代码时需要导入。地址:http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.3.4/rabbitmq-java-client-bin-3.3.4.zip

      安装完成后,在RabbitMQ的安装目录的sbin先会有:rabbitmq-server.bat。在cmd下:进入sbin目录,运行rabbitmq-server start。

    2、介绍

      RabbitMQ 是信息传输的中间者。本质上,他从生产者(producers)接收消息,转发这些消息给消费者(consumers).换句话说,他能够按根据你指定的规则进行消息转发、缓冲、和持久化。

      RabbitMQ 的一些常见的术语:
      Producing意味着无非是发送。一个发送消息的程序是一个producer(生产者)。一般用下图表示Producer:

         

      Queue(队列)类似邮箱。依存于RabbitMQ内部。虽然消息通过RabbitMQ在你的应用中传递,但是它们只能存储在queue中。队列不受任何限制,可以存储任何数量的消息—本质上是一个无限制的缓存。很多producers可以通过同一个队列发送消息,相同的很多consumers可以从同一个队列上接收消息。一般用下图表示队列:

         

      Consuming(消费)类似于接收。consumer是基本属于等待接收消息的程序。一般使用下图表示Consumer:

         


      注意:producer(生产者),consumer(消费者),broker(RabbitMQ服务)并不需要部署在同一台机器上,实际上在大多数实际的应用中,也不会部署在同一台机器上。

    2、Java入门实例
       一个producer发送消息,一个接收者接收消息,并在控制台打印出来。如下图:

      
      在开始编写代码前,需要将rabbitMQ的jar包加入到classpath中。
      发送端:Send.java 连接到RabbitMQ(此时服务需要启动),发送一条数据,然后退出。
     1 package com.zhy.rabbit._01;
     2 
     3 import com.rabbitmq.client.Channel;
     4 import com.rabbitmq.client.Connection;
     5 import com.rabbitmq.client.ConnectionFactory;
     6 
     7 public class Send
     8 {
     9     //队列名称
    10     private final static String QUEUE_NAME = "hello";
    11 
    12     public static void main(String[] argv) throws java.io.IOException
    13     {
    14         /**
    15          * 创建连接连接到MabbitMQ
    16          */
    17         ConnectionFactory factory = new ConnectionFactory();
    18         //设置MabbitMQ所在主机ip或者主机名
    19         factory.setHost("localhost");
    20         //创建一个连接
    21         Connection connection = factory.newConnection();
    22         //创建一个频道
    23         Channel channel = connection.createChannel();
    24         //指定一个队列
    25         channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    26         //发送的消息
    27         String message = "hello world!";
    28         //往队列中发出一条消息
    29         channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
    30         System.out.println(" [x] Sent '" + message + "'");
    31         //关闭频道和连接
    32         channel.close();
    33         connection.close();
    34      }
    35 }

      值得注意的是队列只会在它不存在的时候创建,多次声明并不会重复创建。信息的内容是字节数组,也就意味着你可以传递任何数据。

      接收端:Recv.java 不断等待服务器推送消息,然后在控制台输出。

     1 package com.zhy.rabbit._01;
     2 
     3 import com.rabbitmq.client.Channel;
     4 import com.rabbitmq.client.Connection;
     5 import com.rabbitmq.client.ConnectionFactory;
     6 import com.rabbitmq.client.QueueingConsumer;
     7 
     8 public class Recv
     9 {
    10     //队列名称
    11     private final static String QUEUE_NAME = "hello";
    12 
    13     public static void main(String[] argv) throws java.io.IOException,
    14             java.lang.InterruptedException
    15     {
    16         //打开连接和创建频道,与发送端一样
    17         ConnectionFactory factory = new ConnectionFactory();
    18         factory.setHost("localhost");
    19         Connection connection = factory.newConnection();
    20         Channel channel = connection.createChannel();
    21         //声明队列,主要为了防止消息接收者先运行此程序,队列还不存在时创建队列。
    22         channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    23         System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
    24         
    25         //创建队列消费者
    26         QueueingConsumer consumer = new QueueingConsumer(channel);
    27         //指定消费队列
    28         channel.basicConsume(QUEUE_NAME, true, consumer);
    29         while (true)
    30         {
    31             //nextDelivery是一个阻塞方法(内部实现其实是阻塞队列的take方法)
    32             QueueingConsumer.Delivery delivery = consumer.nextDelivery();
    33             String message = new String(delivery.getBody());
    34             System.out.println(" [x] Received '" + message + "'");
    35         }
    36 
    37     }
    38 }

      分别运行Send.java和Recv.java 顺序无所谓。前提RabbitMQ服务开启。

      运行结果:

      [x]Sent 'hello world!'

      ----------------------------------------

      [*] Waiting for messages. To exitpress CTRL+C

      [x] Received 'hello world!'

      参考文章:http://blog.csdn.net/lmj623565791/article/details/37607165
     
  • 相关阅读:
    HDU 1813 Escape from Tetris
    BZOJ 2276 Temperature
    BZOJ 4499 线性函数
    BZOJ 3131 淘金
    HDU 5738 Eureka
    POJ 2409 Let it Bead
    POJ 1286 Necklace of Beads
    POJ 1696 Space Ant
    Fox And Jumping
    Recover the String
  • 原文地址:https://www.cnblogs.com/lcngu/p/5730558.html
Copyright © 2020-2023  润新知