美文网首页
6.rabbitmq主题模式(通配符模式)

6.rabbitmq主题模式(通配符模式)

作者: 指尖架构141319 | 来源:发表于2019-07-25 17:14 被阅读0次

1.介绍

image.png image.png image.png

同一个消息被多个消费者获取。一个消费者队列可以有多个消费者实例,只有其中一个消费者实例会消费到消息。

2.撸代码

  • 生产者
package com.zpc.rabbitmq.topic;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.zpc.rabbitmq.util.ConnectionUtil;

public class Send {
    private final static String EXCHANGE_NAME = "test_exchange_topic";
    public static void main(String[] argv) throws Exception {
        // 获取到连接以及mq通道
        Connection connection = ConnectionUtil.getConnection();
        Channel channel = connection.createChannel();
        // 声明exchange
        channel.exchangeDeclare(EXCHANGE_NAME, "topic");
        // 消息内容
        String message = "Hello World!!";
        channel.basicPublish(EXCHANGE_NAME, "routekey.1", null, message.getBytes());
        System.out.println(" [x] Sent '" + message + "'");
        channel.close();
        connection.close();
    }
}
  • 消费者1
package com.zpc.rabbitmq.topic;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;
import com.zpc.rabbitmq.util.ConnectionUtil;

public class Recv {
    private final static String QUEUE_NAME = "test_queue_topic_work_1";
    private final static String EXCHANGE_NAME = "test_exchange_topic";
    public static void main(String[] argv) throws Exception {

        // 获取到连接以及mq通道
        Connection connection = ConnectionUtil.getConnection();
        Channel channel = connection.createChannel();
        // 声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 绑定队列到交换机
        channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "routekey.*");
        // 同一时刻服务器只会发一条消息给消费者
        channel.basicQos(1);
        // 定义队列的消费者
        QueueingConsumer consumer = new QueueingConsumer(channel);
        // 监听队列,手动返回完成
        channel.basicConsume(QUEUE_NAME, false, consumer);
        // 获取消息
        while (true) {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String message = new String(delivery.getBody());
            System.out.println(" [Recv_x] Received '" + message + "'");
            Thread.sleep(10);
            channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
        }
    }
}
  • 消费者2
package com.zpc.rabbitmq.topic;
import com.zpc.rabbitmq.util.ConnectionUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.QueueingConsumer;

public class Recv2 {
    private final static String QUEUE_NAME = "test_queue_topic_work_2";
    private final static String EXCHANGE_NAME = "test_exchange_topic";
    public static void main(String[] argv) throws Exception {
        // 获取到连接以及mq通道
        Connection connection = ConnectionUtil.getConnection();
        Channel channel = connection.createChannel();
        // 声明队列
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        // 绑定队列到交换机
        channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "*.*");
        // 同一时刻服务器只会发一条消息给消费者
        channel.basicQos(1);
        // 定义队列的消费者
        QueueingConsumer consumer = new QueueingConsumer(channel);
        // 监听队列,手动返回完成
        channel.basicConsume(QUEUE_NAME, false, consumer);
        // 获取消息
        while (true) {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String message = new String(delivery.getBody());
            System.out.println(" [Recv2_x] Received '" + message + "'");
            Thread.sleep(10);
            channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
        }
    }
}

相关文章

  • 6.rabbitmq主题模式(通配符模式)

    1.介绍 同一个消息被多个消费者获取。一个消费者队列可以有多个消费者实例,只有其中一个消费者实例会消费到消息。 2...

  • RabbitMQ工作模式 - 主题模式(Topic 模式) --

    RabbitMQ主题模式(Topic)跟路由模式类似,区别在于主题模式的路由匹配支持通配符模糊匹配,而路由模式仅支...

  • RabbitMQ主题模式(Topic)

    主题模式(Topic) 主体模式其实就是在路由模式的基础上,支持了对key的通配符匹配(星号以及井号),以满足更加...

  • Rabbitmq打怪升级之路(十一)Topic-主题通配符模式

    简书:亚武de小文 【原创:转载请注明出处】 主题交换机模式(Topic) 通配符工作模式 RabbitMQ有以下...

  • 模式匹配

    模式 模式类型 通配符模式 _ 匹配任何值 _? 匹配非nil值 标识符模式 值绑定模式 元组模式 枚举case模...

  • Swift笔记:模式和模式匹配

    通配符模式 通配符模式用一个_ 下划线匹配或忽略任何字符 标识符模式 标识符模式可以匹配任何值,并将匹配的值和一个...

  • ios 经典面试案例 (七)

    Swift有哪些模式匹配? 模式匹配总结: 1.通配符模式(Wildcard Pattern)如果你在 Swift...

  • rabbitMq-主题模式topic-java

    工作原理:主题模式在路由模式的基础上再次升级,使用通配符的方式,匹配路由key(用来描述一部分类似的路由key进行...

  • 9 通配符模式

    1 图解 2 代码 3 代码介绍 3.1 引入必须依赖 3.2 获取MQ连接 3.3 消息消费者1 3.4 消息消...

  • Swift-模式匹配

    模式就是匹配的规则,下面介绍Swift中的模式。 1. 通配符模式 _匹配任何值,_?匹配非nil值。 2. 标识...

网友评论

      本文标题:6.rabbitmq主题模式(通配符模式)

      本文链接:https://www.haomeiwen.com/subject/bdtkrctx.html