rabbitmq随手记

 

 

  • type:此queue的类型,默认为classic 主队列,也可以设置为quorum 从队列
  • name:此queue的名称
  • durability:queue中的消息是否要持久化到硬盘
  • auto delete:如果此queue没有绑定到任何一个exchange,是否自动删除此queue
  • arguments:设置一些其它参数
  • exchange、queue的消息持久化能力,保证了rabbitmq的高可靠性。

 

一、rabbitmq安装

  1、下载安装erlang,原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang。

    (1)官网地址:http://www.erlang.org/downloads,选择需要的版本下载。之后傻瓜式安装,直接下一步下一步。

    (2)安装完后记得配置path路径:此电脑-->鼠标右键“属性”-->高级系统设置-->环境变量-->“新建”系统环境变量

      

     (3)点击“新建”,将%ERLANG_HOME%\bin加入到path中。

      (4)最后windows键+R键,输入cmd,再输入erl,看到版本号就说明erlang安装成功了。

      

  2、下载安装rabbitmq

    (1)下载地址:http://www.rabbitmq.com/download.html

    (2)选择需要的版本  

        

 

      (3)双击下载后的.exe文件,安装过程与erlang的安装过程相同。

     (4)RabbitMQ安装好后接下来安装RabbitMQ-Plugins。打开命令行cd,输入RabbitMQ的sbin目录。然后在后面输入rabbitmq-plugins enable rabbitmq_management命令进行安装。    

        

 

     (5)打开命令行命令行,进入RabbitMQ的安装目录: sbin,输入 rabbitmqctl status , 如果出现以下的图,说明安装是成功的,并且说明现在RabbitMQ Server已经启动了,运行正常。 如果没有正常启动打开sbin目录,双击rabbitmq-server.bat。

        

 

     (6)等几秒钟看到这个界面后,访问http://localhost:15672,默认用户名和密码都是guest

     

    备注:如果之前有安装过rabbitmq,访问rabbitmq页面时,如果只看到一片空白,此时需要清空下浏览器,重新访问就可以了

二、配置exchanges交换机

  (1)进入rabbitmq的web界面,点击Exchanges。输入交换机名称,点击Add exchange。

        

三、配置queues队列

    (1)进入rabbitmq的web界面,点击Queues。输入交换机名称,点击Add exchange。注意,优先级类型选择Number

        

四、交换机和队列绑定,选择Exchanges,点击刚新建的交换进名称,

  

 

 

 

 

五、rabbitmq优先级单元测试

  1、需要在web界面配置queues优先级,也可以在代码里实现,我这里手动配置的。

    

  2、

public class Producer {
    private final static String QUEUE_NAME = "rk_liuhui";

    public static void main(String[] args) throws IOException, TimeoutException {
        //创建一个工厂连接
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setUsername("guest");
        factory.setPassword("guest");

        //创建连接
        Connection connection = factory.newConnection();
        //获取信道
        Channel channel = connection.createChannel();
        /**
         * 生成1个队列
         * 1.队列名称
         *  2.队列里面的消息是否持久化 也就是是否用完就删除
         *  3.该队列是否只供一个消费者进行消费 是否进行共享 true 可以多个消费者消费
         *  4.是否自动删除 最后一个消费者断开连接以后 该队列是否自动删除 true 自动删除
         *  5.其他参数
         */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        //要发送的消息体
        String message = "hello world";
        /**
         * 发送一个消息
         * 1.发送到那个交换机
         *  2.路由的 key 是哪个
         *   3.其他的参数信息
         *   4.发送消息的消息体
         */
        for (int i = 0; i < 10; i++) {
            //循环发送优先级不同的消息
            AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder();
            builder.priority(i);
            AMQP.BasicProperties properties = builder.build();
            System.out.println("发送消息优先级:"+i);
            channel.basicPublish("exchange.direct", QUEUE_NAME, properties, ("消息优先级:"+i).getBytes());
        }
        System.out.println("发送消息完成");
    }
生产者代码
public class Consumer {
    public static final String QUEUE_NAME = "com.liuhui";
    public static void main(String[] args) throws IOException, TimeoutException {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setUsername("guest");
        factory.setPassword("guest");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        System.out.println("等待接收消息.........");
        //推送的消息如何进行消费的接口回调
        DeliverCallback deliverCallback = (consumerTag, delivery)->{
            String message = new String(delivery.getBody());
            System.out.println(message);
        };
        //取消消费的一个回调接口 如在消费的时候队列被删除掉了
        CancelCallback callback = (consumerTag)->{
            System.out.println("消息消费被中断");
        };
        /**
         * 消费者消费消息 - 接受消息
         * 1.消费哪个队列
         * 2.消费成功之后是否要自动应答 true 代表自动应答 false 手动应答
         * 3.消费者未成功消费的回调
         * 4.消息被取消时的回调
         */
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, callback);

    }
消费者代码
  <dependencies>
        <!--rabbitmq 依赖客户端-->
        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.8.0</version>
        </dependency>
        <!--操作文件流的一个依赖-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>
pom依赖

 六、exchanges交换机三种模式介绍

  1、fanout模式,广播式消息推送,不需要路由键(routing key),绑定的节点都会收到消息

  2、direct模式,精确匹配routing key,将消息发送到绑定到交换机的指定队列中。

  3、topic模式,模糊匹配routing key,将消息发送到绑定到交换机指定队列中。

    *(星号)用来表示一个单词

      #(井号)用来表示任意数量(零个或者多个)单词。

 

posted @ 2022-02-21 14:48  苦逼的1024  阅读(389)  评论(0)    收藏  举报