1-RabbitMQ安装及简单实例

来源:互联网 发布:网络推广待遇 编辑:程序博客网 时间:2024/04/30 07:37

RabbitMQ安装及简单实例

1      RabbitMQ简介

它其实主要就是接受和转发消息,你可以把他理解成邮箱,当你把你想要发布的邮件信箱,可以肯定的是,邮差先生最终会交付收件人的邮件。在这个比喻中,RabbitMQ信箱,一个邮局和一个邮差。

RabbitMQ和邮局之间的主要区别是,它不处理,相反,它接受数据,消息的存储和转发的二进制文件。

·        发布者,相当于是寄信人。把你所需要传递的消息丢到邮箱:

·        消费者,相当于收件人。消费者大多是一个程序,等待接收消息:


·        RabbitMQ新建一个队列,这个队列相当于信箱。尽管通过RabbitMQ消息流和应用程序,他们只能存储在一个队列。队列只受主人的内存和磁盘限制,它本质上是一个大消息缓冲区。许多生产商可以将消息发送到一个队列,和许多消费者可以接收数据从一个队列。这就是我们如何代表一个队列:


在下面的图中,“P”是我们的发布者,“C”是我们消费者。中间的框是一个队列


2      RabbitMQ的安装

Windows环境搭建:http://www.cnblogs.com/ericli-ericli/p/5902270.html

RabbitMQ环境变量搭好以后,访问:http://127.0.0.1:15672/,使用刚创建的用户进行登录。

进入admin的配置界面,配置虚拟主机的读取权限



RabbitMQ关闭、开启指令

net stop rabbitMQ  关闭

net start rabbitMQ  开启

3      RabbitMQ简单实例

3.1  所需要的jar包

下载客户端库及其依赖项(SLF4J APISLF4J简单)

Mavenpom依赖如下

<!-- RabbitMq客户端 -->

    <dependency>

        <groupId>com.rabbitmq</groupId>

        <artifactId>amqp-client</artifactId>

        <version>3.3.4</version>

    </dependency>

客户端库:rabbitmq-client.jar

依赖库:slf4j-api-1.7.21.jarslf4j-simple-1.7.22.jar

3.2  发送

发布者发布消息到队列,代码如下

package MQ;

 

import java.io.IOException;

import java.util.concurrent.TimeoutException;

 

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import com.rabbitmq.client.ConnectionFactory;

 

public classSend {

   private final static String QUEUE_NAME ="hello";

 

   public static void main(String[] args)throws IOException,TimeoutException {

      // 创建连接连接到MabbitMQ

      ConnectionFactoryfactory = newConnectionFactory();

      // 设置MabbitMQ所在主机ip或者主机名

      factory.setHost("127.0.0.1");

      // factory.setUsername("yuanh");

      // factory.setPassword("yuanh");

      // factory.setPort(5672);

      // factory.setVirtualHost("y_yuanh");

      Connectionconnection = factory.newConnection();

      // 创建一个频道

      Channelchannel = connection.createChannel();

      // 创建一个队列

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

      Stringmessage = "Hello World!";

      // 将消息放到队列里面

      channel.basicPublish("",QUEUE_NAME,null, message.getBytes());

      System.out.println("发送 '" + message +"'");

      //关闭通道和连接

      channel.close();

      connection.close();

   }

}

 

当你有配置虚拟主机,以及用户需要密码验证的时候,则需要加上

       factory.setUsername("yuanh");

       factory.setPassword("yuanh");

       factory.setPort(5672);

       factory.setVirtualHost("y_yuanh");

 

RabbitMQ中的hello队列接收发送消息,后台显示有一条为送出的记录,如图

3.2.1  虚拟主机的配置

为虚拟主机添加用户


3.3  接收

消费者从队列中取出消息,消费者保持运行监听消息并打印出来。代码如下

package MQ;

 

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import com.rabbitmq.client.ConnectionFactory;

import com.rabbitmq.client.QueueingConsumer;

 

@SuppressWarnings("deprecation")

public classRecv {

   private final static String QUEUE_NAME ="hello";

 

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

 

      // 创建连接连接到MabbitMQ

      ConnectionFactoryfactory = newConnectionFactory();

      // 设置MabbitMQ所在主机ip或者主机名

      factory.setHost("127.0.0.1");

      factory.setUsername("yuanh");

      factory.setPassword("yuanh");

      factory.setPort(5672);

      factory.setVirtualHost("y_yuanh");

      Connectionconnection = factory.newConnection();

      Channelchannel = connection.createChannel();

 

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

      System.out.println(" [*] Waiting for messages. To exit pressCTRL+C");

      QueueingConsumerconsumer = newQueueingConsumer(channel);

      channel.basicConsume(QUEUE_NAME,true, consumer);

      try {

         while (true) {

            QueueingConsumer.Deliverydelivery = consumer.nextDelivery();

            Stringmessage = newString(delivery.getBody());

            System.out.println(" [x] Received '"+ message +"'");

         }

      }catch(Exception e) {

         channel.close();

         connection.close();

      }

   }

}

 

hello队列中的消息被消化

1 0
原创粉丝点击