RabbitMQ之Hello World

来源:互联网 发布:电视机通过网络看电视 编辑:程序博客网 时间:2024/05/23 01:13

本文以java语言实现

erlang 下载页面
RabbitMQ 下载页面

RabbitMQ Hello World官方文档

环境安装

  1. 由于RabbitMQ 是基于erlang实现的,所以需要先安装erlang环境
    在path环境变量中添加erlang安装路径下的bin文件的路径
  2. 安装RabbitMQ

这里写图片描述
window系统下我将RabbitMQ的安装路径添加到了系统环境变量path中,这一步不是必须的

http://127.0.0.1:15672/
guest/guest

这里写图片描述

实现

依赖类:
amqp-client-4.0.2.jar
slf4j-api-1.7.21.jar
slf4j-simple-1.7.22.jar

接收者的实现代码存放于Recv.java文件中

import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Connection;import java.io.IOException;import com.rabbitmq.client.AMQP.BasicProperties;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Consumer;import com.rabbitmq.client.DefaultConsumer;import com.rabbitmq.client.Envelope;public class Recv {    private final static String QUEUE_NAME = "hello";    public static void main(String[] args)        throws java.io.IOException,                java.util.concurrent.TimeoutException,                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");        Consumer consumer = new DefaultConsumer(channel) {            @Override            public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)                    throws IOException {                // TODO Auto-generated method stub//              super.handleDelivery(consumerTag, envelope, properties, body);                String message = new String(body,"UTF-8");                System.out.println(" [x] Received '" + message + "'");            }        };        channel.basicConsume(QUEUE_NAME, true, consumer);    }}

发送者的实现代码存放于Send.java文件中

import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Connection;import com.rabbitmq.client.Channel;public class Send {    private final static String QUEUE_NAME = "hello";    public static void main(String[] args) throws java.io.IOException,java.util.concurrent.TimeoutException{        ConnectionFactory factory = new ConnectionFactory();        factory.setHost("localhost");        Connection connection = factory.newConnection();        Channel channel = connection.createChannel();        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();    }}

发送者、接收者使用的队列名需要保持一致,否则无法正确接收消息
localhost 也可以改成机器的ip地址

执行

javac -cp amqp-client-4.0.2.jar Send.java Recv.javajava -cp .;amqp-client-4.0.2.jar;slf4j-api-1.7.21.jar;slf4j-simple-1.7.22.jar Recvjava -cp .;amqp-client-4.0.2.jar;slf4j-api-1.7.21.jar;slf4j-simple-1.7.22.jar Send

以上代码是在window系统下执行的,如需在Linux下执行,请将分号改为冒号

消息发送的流程
这里写图片描述

消息接收的流程
这里写图片描述

原创粉丝点击