• RabbitMQ 入门 Helloworld


    1.介绍

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

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

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

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


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

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


    注:需要在官网下载rabbitmq-java-client-bin-*.zip将jar放入项目的classpath.

    发送端:Send.java 连接到RabbitMQ(此时服务需要启动),发送一条数据,然后退出。

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


    注:需要在官网下载rabbitmq-java-client-bin-*.zip将jar放入项目的classpath.

    发送端:Send.java 连接到RabbitMQ(此时服务需要启动),发送一条数据,然后退出。

     1 package com.hehe.rabbit;
     2 
     3 
     4 import java.io.IOException;
     5 import java.util.concurrent.TimeoutException;
     6 
     7 
     8 import com.rabbitmq.client.Channel;
     9 import com.rabbitmq.client.Connection;
    10 import com.rabbitmq.client.ConnectionFactory;
    11 
    12 public class Send {
    13     
    14     //定义一个队列名称
    15     private final static String QUEUE_NAME = "hello";
    16      
    17     public static void main(String[] argv) throws IOException, TimeoutException {
    18         //创建连接,连接到MabbitMQ
    19         ConnectionFactory factory = new ConnectionFactory();
    20         //设置MabbitMQ所在主机ip或者主机名
    21         factory.setHost("192.168.48.66");
    22         //设置端口号
    23         factory.setPort(5672);
    24         //设置用户名
    25         factory.setUsername("admin");
    26         //设置密码
    27         factory.setPassword("123");
    28         //创建一个连接
    29         Connection connection = factory.newConnection();
    30         //创建一个通道
    31         Channel channel = connection.createChannel();
    32         //指定一个队列
    33         channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    34         //发送的消息
    35         String message = "Hello RabbitMQ World!";
    36         //往队列中发送一条消息
    37         for (int i = 0; i < 10; i++) {
    38             
    39             channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
    40             
    41             System.out.println(" [x] Sent '" + message + "'");
    42         }
    43
    44         
    45         
    46  
    47     }
    48     
    49     
    50 }

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

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

     1 package com.hehe.rabbit;
     2 
     3 import java.io.IOException;
     4 import java.util.concurrent.TimeoutException;
     5 
     6 import com.rabbitmq.client.AMQP;
     7 import com.rabbitmq.client.Channel;
     8 import com.rabbitmq.client.Connection;
     9 import com.rabbitmq.client.ConnectionFactory;
    10 import com.rabbitmq.client.Consumer;
    11 import com.rabbitmq.client.DefaultConsumer;
    12 import com.rabbitmq.client.Envelope;
    13  
    14 public class Receiver {
    15  
    16     private final static String QUEUE_NAME = "hello";
    17  
    18     public static void main(String[] argv)
    19             throws java.io.IOException, java.lang.InterruptedException, TimeoutException {
    20  
    21         ConnectionFactory factory = new ConnectionFactory();
    22         factory.setHost("192.168.48.66");
    23         factory.setPort(5672);
    24         factory.setUsername("admin");
    25         factory.setPassword("123");
    26         Connection connection = factory.newConnection();
    27         Channel channel = connection.createChannel();
    28  
    29         channel.queueDeclare(QUEUE_NAME, false, false, false, null);
    30         System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
    31  
    32         Consumer consumer = new DefaultConsumer(channel) {
    33             @Override
    34             public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
    35                     byte[] body) throws IOException {
    36                 String message = new String(body, "UTF-8");
    37                 System.out.println(" [x] Received '" + message + "'");
    38             }
    39         };
    40         channel.basicConsume(QUEUE_NAME, true, consumer);
    41     }
    42 }

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

    运行结果:

    [x]Sent 'hello world!'

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

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

    [x] Received 'hello world!'

  • 相关阅读:
    django文件——django + jquery-file-upload上传篇(一)-- 插件实现文件上传
    jQuery动态数字翻滚计数到指定数字的文字特效 JQuery.Running.js
    bootstrap table 第一弹:实现模态框弹出编辑
    input输入框下横线动画实现+自动填充
    Jquery 实现动态添加输入框&编号
    解决公司内网只允许微信上网:CentOS7 + SS5 搭建Sockt5代理服务器方案
    python学习系列:装饰器
    linux学习:文件属性(一)—— inode
    requests模块中request函数参数介绍
    Forbidden(403)的3种处理方式
  • 原文地址:https://www.cnblogs.com/yuexuan/p/6083225.html
Copyright © 2020-2023  润新知