RabbitMQ第一篇——初识RabbitMQ,简单的消息发送和接收

来源:互联网 发布:淘宝充值平台官网登录 编辑:程序博客网 时间:2024/06/05 09:09

       简单的说,RabbitMQ有点类似于生产者消费者问题。有N个发送消息客户端、N个接收消息客户端和一个消息队列。值得一提的是这N个消息发送者可以将信息发送到同一个消息队列,而这个队列也可以被N消息接收者接收。Note:生产者消费者不一定要在同一个机器。

       下面将详细介绍Java操作RabbitMQ,我们以“Hello Word“ 为例。

        我们会创建两个客户端,一个是生产者,向RabbitMQ传输信息。另一个是消费者,从RabbitMQ拿到信息。


       首先先建立与mq的链接,然后通过链接建立一个通道(Channel)通过通道向MQ发送消息

    ConnectionFactory factory = new ConnectionFactory();    factory.setHost("localhost");    Connection connection = factory.newConnection();    Channel channel = connection.createChannel();
       

        接下来就是在Channel上申明一个队列,因为在MQ中所有消息的接收和发送都是通过queue来完成的。

        申明完队列以后通过basicPublish()方法发送消息,一个有四个参数,现在暂且只介绍两个,剩下的会后续介绍,现在先设置为空。注意发送的消息必须是二进制数组。

    channel.queueDeclare(QUEUE_NAME, false, false, false, null);    String message = "Hello World!";    channel.basicPublish("", QUEUE_NAME, null, message.getBytes());    System.out.println(" [x] Sent '" + message + "'");
         

           最后当然不要忘了将链接关闭。

    channel.close();    connection.close();



           发送完了,自然要接收,下面就是接收的代码。记住发送和接收的队列名字必须一致,才能接收的消息。

public class Recv {  private final static String QUEUE_NAME = "hello";  public static void main(String[] argv)      throws java.io.IOException,             java.lang.InterruptedException {    ConnectionFactory factory = new ConnectionFactory();    factory.setHost("localhost");    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");
<span class="n" style="font-family: Arial, Helvetica, sans-serif;">         </span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">Consumer</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">consumer</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">=</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="k" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">new</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">DefaultConsumer</span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">(</span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">channel</span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">)</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">{</span>
<span class="nd" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif;"><span style="background-color: rgb(238, 238, 238);">                 </span>@Override</span>
<span class="kd" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif;">                 </span><span class="kd" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">public</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="kt" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(68, 85, 136); font-weight: bold;">void</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="nf" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(153, 0, 0); font-weight: bold;">handleDelivery</span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">(</span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">String</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">consumerTag</span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">,</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">Envelope</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">envelope</span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">,</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">AMQP</span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">.</span><span class="na" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">BasicProperties</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">properties</span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">,</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="kt" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(68, 85, 136); font-weight: bold;">byte</span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">[]</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">body</span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">) </span><span class="kd" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">throws</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="n" style="font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; color: rgb(0, 128, 128);">IOException</span><span style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(238, 238, 238);"> </span><span class="o" style="color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-weight: bold;">{</span>
<pre style="padding: 5px 15px; border-radius: 5px; color: rgb(85, 85, 85); font-size: 13px; line-height: 18px; background-color: rgb(238, 238, 238);">        <span class="n" style="color: rgb(0, 128, 128);">String</span> <span class="n" style="color: rgb(0, 128, 128);">message</span> <span class="o" style="font-weight: bold;">=</span> <span class="k" style="font-weight: bold;">new</span> <span class="n" style="color: rgb(0, 128, 128);">String</span><span class="o" style="font-weight: bold;">(</span><span class="n" style="color: rgb(0, 128, 128);">body</span><span class="o" style="font-weight: bold;">,</span> <span class="s" style="color: rgb(221, 17, 68);">"UTF-8"</span><span class="o" style="font-weight: bold;">);</span>        <span class="n" style="color: rgb(0, 128, 128);">System</span><span class="o" style="font-weight: bold;">.</span><span class="na" style="color: rgb(0, 128, 128);">out</span><span class="o" style="font-weight: bold;">.</span><span class="na" style="color: rgb(0, 128, 128);">println</span><span class="o" style="font-weight: bold;">(</span><span class="s" style="color: rgb(221, 17, 68);">" [x] Received '"</span> <span class="o" style="font-weight: bold;">+</span> <span class="n" style="color: rgb(0, 128, 128);">message</span> <span class="o" style="font-weight: bold;">+</span> <span class="s" style="color: rgb(221, 17, 68);">"'"</span><span class="o" style="font-weight: bold;">);</span>      <span class="o" style="font-weight: bold;">}</span>    <span class="o" style="font-weight: bold;">};</span>
   channel.basicConsume(QUEUE_NAME, true, consumer);
}
}



0 0
原创粉丝点击