RabbitMQ新闻队列之二:消费者和劳动者美学原理

RabbitMQ 新闻生产者的代码达成

import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
public class RabbitProducer {
    private final static String QUEUE_NAME = "RabbitMQ_Hello"; //消息队列名

      public static void main(String[] argv) throws Exception {
         //创建连接连接到RabbitMQ 
        ConnectionFactory factory = new ConnectionFactory();
        // 设置ip
        factory.setHost("127.0.0.1");
        /*   //设置端口
        factory.setPort(15672);
        //设置用户名
        factory.setUsername("guest");
        //设置密码
        factory.setPassword("guest");
       //设置url(包括ip、端口、用户名、密码)
        factory.setUri("amqp://guest:guest@localhost:15672");
      */    
        // 创建一个连接  
        Connection connection = factory.newConnection();
        // 创建一个频道 
        Channel channel = connection.createChannel();
        // 指定一个队列  
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        Map<String,Object> map=new HashMap<String,Object>();  
          map.put("java", "hello");
          map.put("RabbitMQ", "Hello");
        //发送的消息
        String message = JSON.toJSONString(map); 
        // 往队列中发出一条消息 
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes()); 
        System.out.println(" [x] Sent '" + message + "'");
        // 关闭频道和连接  
        channel.close();
        connection.close();   
      }
}

美学原理,RabbitMQ的术语解释

生产者:生产音讯,发送消息。类似工厂。
顾客:接受音讯,使用音讯。类似顾客。
队列:存款和储蓄音讯。类似仓库、中间转播站。队列能够储存很多的音信,因为它基本上是三个随机的缓冲区,前提是您的机械有丰硕的囤积空间。五个生产者能够将音信发送到同一个队列中,多个买主也足以只从同四个体系接收数据。那正是队列的性状。

示例图

美学原理 1

RabbitMQ音讯消费者的代码已毕

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;

//消费者 
public class RabbitConsumer {

  private final static String QUEUE_NAME = "RabbitMQ_Hello"; //消息队列名

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

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
       // 打开连接和创建频道,与发送端一样  
        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) {  //消费者程序运行开着 如果生产者新增了数据会自动获取
          Thread.sleep(500);
             // nextDelivery是一个阻塞方法(内部实现其实是阻塞队列的take方法)  
          QueueingConsumer.Delivery delivery = consumer.nextDelivery();
          String message = new String(delivery.getBody());
          System.out.println("'[x] Received '" + message );
  }   
  }
}

开拓当地的RabbitMQ,之后运营生产者代码,会将音信存款和储蓄到RabbitMQ中,能够因此RabbitMQ
web界面看到新闻。

美学原理 2

美学原理 3

美学原理 4

美学原理 5

运营消费者代码,会将该音信消费掉,能够在RabbitMQ
web界面能够发现上边存款和储蓄的音讯一度远非了。
美学原理 6

美学原理 7

通过这些demo,能够对音讯队列有了一个的中坚的问询了。

RabbitMQ的劳作规律

RabbitMQ是音讯代理。从精神上说,它接受来自生产者的音信,并将它们传递给顾客。在两者之间,它能够依据你给它的路由,缓冲规则进行传递音讯。

在利用RabbitMQ以前,需求驾驭RabbitMQ的办事原理。