记一次RabbitMQ使用

RabbitMQ基于Erlang语言开发,要先安装Erlang

一、Erlang 安装与配置

  Erlang下载地址:http://www.erlang.org/downloads

  1、根据自己的配置选择相应的版本

  

 

    安装比较简单,一路 next 就ok了。

  2、安装完成后要配置环境变量:

    变量名:ERLANG_HOME

    变量值:Erlang安装路径

    

    如果计算机不能设置环境变量,cmd窗口执行:

    setx ERLANG_HOME "安装路径"

    setx 此命令同样适用与其他环境变量设置!

二、接下来就是RabbitMQ的安装与配置

  1、RabbitMQ下载地址:https://www.rabbitmq.com/install-windows.html

  

  同样比较简单,一路next。。。

  2、安装完成后,在cmd窗口中执行以下命令激活RabbitMQ Manage Plugin

  "E:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.15\sbin\rabbitmq-plugins.bat" enable rabbitmq_management

  

  3、激活完成后以管理员身份 cmd 窗口中执行以下命令,重启
  net stop RabbitMQ && net start RabbitMQ

  4、浏览器输入http://localhost:15672   可以进入到后台管理系统,默认的用户和密码是 guest / guest

   

  

   当然也可以创建新的用户

 

  

 

     5、创建完成,接下来可以使用java来操作了。。不要着急可能会有坑

    首先引入依赖

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

    接着写生产者

public class producer {

    private final static String EXCHANGE_NAME = "durable";
    private final static String QUEUE_NAME = "nice";

    public static void main(String[] args) {
        // 创建连接
        ConnectionFactory factory = new ConnectionFactory();
        // 绑定主机、用户名
        factory.setHost("127.0.0.1");
        factory.setUsername("developer");
        factory.setPassword("123456");

        // 获取连接
        Connection connection = factory.newConnection();
        // 创建通道
        Channel channel = connection.createChannel();
        // 设置 exchange 持久化
        channel.exchangeDeclare(EXCHANGE_NAME, "direct", true);
        // true 开启队列持久化
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);
        // 发送消息
        String message = "nice to meet you!";
        // 消息持久化
        AMQP.BasicProperties basicProperties = new AMQP.BasicProperties().builder().deliveryMode(2).build();
        channel.basicPublish("", QUEUE_NAME, basicProperties, message.getBytes());

        // 关闭管道和连接
        channel.close();
        connection.close();
    }
}    

 

     运行代码,如果出现下面这种情况,不要慌张

 

 

  在后台管理系统中找到 Admin , 点击 用户(developer) ,尔后点击 set permission

  或者使用命令,在安装目录的 sbin 目录下

  命令1:rabbitmqctl set_user_tags guest administrator

  命令2:rabbitmqctl set_permissions -p / guest .* .* .*

  

 

 

  问题解决,运行成功后会有队列

 

  

 

 接着写消费者

 

public class Consumer {

    private final static String QUEUE_NAME = "nice";

    public static void main(String[] args) {
        ConnectionFactory factory = new ConnectionFactory();
     // 绑定主机
        factory.setHost("127.0.0.1");
        factory.setUsername("developer");
        factory.setPassword("123456");

        // 创建一个连接
        Connection connection = factory.newConnection();
        // 创建一个通道
        Channel channel = connection.createChannel();
        // 指定一个永久队列
        channel.queueDeclare(QUEUE_NAME, true, false, false, null)
        // 创建队列消
        com.rabbitmq.client.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("Received Message '" + message + "'");
            }
        };
        channel.basicConsume(QUEUE_NAME, true, consumer);
  }
}

  

  注意的是如果生产者设置了永久队列,那消费端在指定队列的时候也要是一个永久的队列,也就是他们的队列要保持一致!!!

posted on 2019-06-03 18:13  LastKnight&  阅读(153)  评论(0)    收藏  举报