zoukankan      html  css  js  c++  java
  • Rabbitmq消息队列(二) Hello World! 模拟简单发送接收

    1、简介

      RabbitMQ是消息代理:它接受和转发消息。你可以把它当作一个邮局:当你把你要邮寄的邮件放在信箱里时,你可以肯定Postman先生最终会把邮件送到你的收件人那里。在这个比喻中,RabbitMQ是邮局,邮局邮差。RabbitMQ和邮局之间的主要区别是,它不处理纸张,而是接受、存储和转发二进制数据‒消息。

      整体的设计如下图:

      

      java环境下,使用rabbitmq需要用到jar包:amqp-client.jar

    2、发送消息

      想要将消息发送到队列中,我们需要进行下面几步:

      (1)建立服务链接

    1 ConnectionFactory factory = new ConnectionFactory();
    2 factory.setHost("localhost");                // 设置ip地址 
    3 factory.setPort(5672);                         // rabbit的端口号,默认为5672,可以不写
    4 factory.setPassword("rabbit");             // 发送消息用户的登录密码
    5 factory.setUsername("rabbit");           // 发送消息用户的登录用户名
    6 Connection connection = factory.newConnection();        // 新建链接
    7 Channel channel = connection.createChannel();            // 创建channel

      (2)声明消息队列

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

      (3)调用方法发送消息

    1 String message = "Hello World!";                    // 待发送的消息
    2 channel.basicPublish("", QUEUE_NAME, null, message.getBytes());

      (4)发送消息过后,需要关闭链接

    1 channel.close();
    2 connection.close();

    3、接收消息

      接下来,当生产者将消息发送到队列之后,我们消费者一方就可以从队列中接收到消息了:

      (1)建立服务器链接,和生产者一方一样

    1 ConnectionFactory factory = new ConnectionFactory();
    2 factory.setHost("localhost");                // 设置ip地址 
    3 factory.setPort(5672);                         // rabbit的端口号,默认为5672,可以不写
    4 factory.setPassword("rabbit");             // 发送消息用户的登录密码
    5 factory.setUsername("rabbit");           // 发送消息用户的登录用户名
    6 Connection connection = factory.newConnection();        // 新建链接
    7 Channel channel = connection.createChannel();            // 创建channel

      (2)声明消息队列

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

      (3)声明回调方法,接收服务器从队列中发过来的消息

     1 Consumer consumer = new DefaultConsumer(channel) {
     2   @Override
     3   public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
     6     String message = new String(body, "UTF-8");
     7     System.out.println(" [x] Received '" + message + "'");
     8   }
     9 };
    10 channel.basicConsume(QUEUE_NAME, true, consumer);

        

    4、运行查看结果

      分别运行生产者方和消费者方的代码过后,通过生产者方发送消息过后,就可以在消费者方接收到发送过来的数据了。

  • 相关阅读:
    51nod 1254 最大子段和 V2
    51nod 1115 最大M子段和 V3
    51nod 1053 最大M子段和 V2
    51nod 1052 最大M子段和
    51nod 1051 最大子矩阵和
    web.config或App.config中AttachDBFilenamex相对路径问题
    [转帖]unity3D OnTriggerEnter和OnCollisionEnter的一点个人心得(主要讲区别)
    unity3d 第一人称脚本解释MouseLook
    unity3d-游戏实战突出重围,整合游戏
    unity3d-游戏实战突出重围,第四天 添加角色
  • 原文地址:https://www.cnblogs.com/origalom/p/8331346.html
Copyright © 2011-2022 走看看