zoukankan      html  css  js  c++  java
  • 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服务启动。

    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队列,可以看到有相应的消费者。

  • 相关阅读:
    关于“云计算”
    实现工作流至少需要几张表?
    BPI (业务流程改进)项目的管理沙龙笔记
    对“设计”工作在流程中的重新定位
    面向。。。驱动
    定个小目标
    Redis源码分析Sentinel(1)Sentinel服务器
    Redis源码分析Sentinel(3)主观下线与客观下线
    Redis源码分析Sentinel(2)实例处理的Monitor half
    Redis源码分析Sentinel(4)实例处理的Acting half
  • 原文地址:https://www.cnblogs.com/gdjlc/p/11905170.html
Copyright © 2011-2022 走看看