Windows下RabbitMQ 的下载、配置、Java实现生产者和消费者例子

RabbitMQ是一个轻量级的消息代理中间件,支持多种消息通信协议,支持分布式部署,支持运行于多个操作系统,具有灵活、高可用等特性。RabbitMQ支持多种协议,其中最为重要的是高级消息队列协议(AMQP),它定义了“消息客户端”和“消息代理中间件”之间的通信协议,基于该协议,消息客户端与消息代理中间件可以不受开发语言、具体产品的约束。

AMQP的大致模型如下图所示:

  

生产者将消息传递给“消息代理(RabbitMQ服务器)”,它们之间会建立消息通道(Channel),消息由交换器(Exchange)先进行处理,再交给一个消息队列(Message Queue),最后消息队列将消息发给消息者。

一、下载RabbitMQ和Erlang

Windos下RabbitMQ的当前服务器最高版本为3.8.1,下载地址:https://www.rabbitmq.com/install-windows.html

RabbitMQ服务器使用的是Erlang语言,因此还需要下载Erlang,当前最高版本为22.1,
下载地址:http://erlang.org/download/,点击里面的文件名称otp_win64_22.1.exe进行下载。

二、配置

1、RabbitMQ安装完后会作为Windows服务启动。

扫描二维码关注公众号,回复: 12806786 查看本文章

2、开启插件管理

cmd进入安装目录的sbin目录,输入下面命令进行安装:
rabbitmq-plugins enable rabbitmq_management

输入下面命令可以查看插件状态:
rabbitmq-plugins list

3、登录Web管理界面

第2步开启插件后,这个地址可以访问: http://localhost:15672/
输入默认的用户名和密码(都是guest)登录,登录后界面如下

备注:RabbitMQ的另一个端口5672用于客户端通信。

、Java实现生产者和消费者例子

对于服务器来说,消息生产者和消费者都属于客户端,它们与服务器之间通过AMQP协议进行通信。AMQP不受语言的限制,客户端可以使用不同的编程语言实现。下面用Java编写客户端。

新建一个Maven项目,pom.xml 加入依赖:

        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.7.3</version>
        </dependency>

1、编写生产者

新建消息生产者,向服务器发送消息。

package com.example.rabbittest;

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

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Send {
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        //建立通道
        Channel channel = connection.createChannel();
        //声明队列
        String queueName = "hello";
        channel.queueDeclare(queueName,false,false,false,null);
        String message = "hello world";
        //消息发布
        channel.basicPublish("", queueName, null, message.getBytes());
        //关闭通道和连接
        channel.close();
        connection.close();
    }
}

上面代码没有声明交换器,会使用默认的交换器。

运行代码后,登录http://localhost:15672/,单击Queues选项卡,可以看到创建了hello队列。

2、编写消费者

新建消息消费者(和生产者在同一个项目中),接受服务器消息。

package com.example.rabbittest;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Receive {
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        //建立通道
        Channel channel = connection.createChannel();
        //声明队列
        String queueName = "hello";
        channel.queueDeclare(queueName,false,false,false,null);
        String message = "hello world";
        //消息发布
        Consumer consumer = new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                String message = new String(body, "UTF-8");
                System.out.println("接收的消息:" + message);
            }
        };
        channel.basicConsume(queueName, true, consumer);
    }
}

运行代码后,打开RabbitMQ控制台,单击hello队列,可以看到有相应的消费者。

猜你喜欢

转载自blog.csdn.net/gdjlc/article/details/115008489