主题交换机类型为:topic。

是直连交换机的一种。只是比直连交换机更灵活,在路由键上引入了通配符的概念

topic交换机支持通配符的路由键. *表示匹配一个词。 #匹配所有

生产者 :

package com.kf.queueDemo.exchange.topic;

import java.io.IOException;
import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection; /**
* 路由模式的生产者(带路由键)
* @author kf
*
*/
public class TopicProducer {
//交换机
private static String TOPICEXCHANGE = "TOPICEXCHANGE";
//路由键
private static String ROUTINGKEY = "log.sms"; public static void main(String[] args) throws IOException, TimeoutException { Connection connection = RabbitConnectionUtils.getConnection();
Channel channel = connection.createChannel();
//声明交换机类型为主题交换机模式
channel.exchangeDeclare(TOPICEXCHANGE, "topic"); String msg = "topic_mes"; //发送消息给 指定交换机EXCHANGENAME的指定路由键ROUTINGKEY上
channel.basicPublish(TOPICEXCHANGE, ROUTINGKEY, null, msg.getBytes()); channel.close();
connection.close(); } }

消费者:

package com.kf.queueDemo.exchange.topic;

import java.io.IOException;
import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
/**
* 路由模式的邮件消费者
* @author kf
*
*/
public class TopicEMAILConsumer {
//队列名
private static String EMAILQUEUENAME = "EMAILQUEUENAME";
//路由键名 topic交换机支持通配符的路由键. *表示匹配一个词。 #匹配所有
private static String SMSROUTINGKEY = "sms";
private static String EMAILROUTINGKEY = "log.*";
//交换机
private static String TOPICEXCHANGE = "TOPICEXCHANGE"; public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("邮件消费者启动=====");
Connection connection = RabbitConnectionUtils.getConnection();
Channel channel = connection.createChannel();
//创建队列:第一个参数是队列名,后面的参数还没搞清楚干嘛的
channel.queueDeclare(EMAILQUEUENAME, false, false, false, null);
//绑定队列到交换机的指定路由键
channel.queueBind(EMAILQUEUENAME, TOPICEXCHANGE, EMAILROUTINGKEY); DefaultConsumer consumer = new DefaultConsumer(channel){
public void handleDelivery(String consumerTag, com.rabbitmq.client.Envelope envelope, com.rabbitmq.client.AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("进入邮件接收消息的监听");
String s = new String(body, "utf-8");
System.out.println("邮件消费者接收到消息:"+s);
};
}; //参数分别是:队列名,是否自动应答,监听的回调类
channel.basicConsume(EMAILQUEUENAME, true, consumer); } }
package com.kf.queueDemo.exchange.topic;

import java.io.IOException;
import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer; /**
* 路由模式的短信消费者
* @author kf
*
*/
public class TopicSMSConsumer {
//队列名
private static String SMSQUEUENAME = "SMSQUEUENAME";
//路由键名 topic交换机支持通配符的路由键. *表示匹配一个词。 #匹配所有
private static String SMSROUTINGKEY = "log.#";
private static String EMAILROUTINGKEY = "EMAIL";
//交换机
private static String TOPICEXCHANGE = "TOPICEXCHANGE"; public static void main(String[] args) throws IOException, TimeoutException {
System.out.println("短信消费者启动=====");
Connection connection = RabbitConnectionUtils.getConnection();
Channel channel = connection.createChannel();
//创建队列:第一个参数是队列名,后面的参数还没搞清楚干嘛的
channel.queueDeclare(SMSQUEUENAME, false, false, false, null);
//绑定队列到交换机的指定路由键
channel.queueBind(SMSQUEUENAME, TOPICEXCHANGE, SMSROUTINGKEY);
//绑定多个交换机的路由键
channel.queueBind(SMSQUEUENAME, TOPICEXCHANGE, EMAILROUTINGKEY); DefaultConsumer consumer = new DefaultConsumer(channel){
public void handleDelivery(String consumerTag, com.rabbitmq.client.Envelope envelope, com.rabbitmq.client.AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("进入短信接收消息的监听");
String s = new String(body, "utf-8");
System.out.println("短信消费者接收到消息:"+s);
};
}; //参数分别是:队列名,是否自动应答,监听的回调类
channel.basicConsume(SMSQUEUENAME, true, consumer); } }

Rabbit主题交换机的更多相关文章

  1. rabbitmq系列五 之主题交换机

    1.主题 在前面的例子中,我们对日志系统进行了改进.使用了direct交换机代替了fanout交换机,从只能盲目的广播消息改进为有可能选择性的接收日志. 尽管直接交换机能够改善我们的日志系统,但是它也 ...

  2. rabbitmq学习(三):rabbitmq之扇形交换机、主题交换机

    前言 上篇我们学习了rabbitmq的作用以及直连交换机的代码实现,这篇我们继续看如何用代码实现扇形交换机和主题交换机 一.扇形交换机 1.生产者 /** * 生产者 */ public class ...

  3. Rabbitmq消息队列(六) 主题交换机

    1.简介 前面学习了有选择性的接收消息,但是却没有办法基于多个标准来接收消息.为了实现这个目的,接下来我们学习如何使用另一种更复杂的交换机 —— 主题交换机. 2.主题交换机 发送到主题交换机(top ...

  4. RabbitMQ入门教程(七):主题交换机Topics

    原文:RabbitMQ入门教程(七):主题交换机Topics 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog. ...

  5. rabbitmq 交换机模式 -主题模式 topic

    建立一个交换机 tpc 并且绑定了各自的路由到 Q1 Q2 <?php require_once "./vendor/autoload.php"; use PhpAmqpLi ...

  6. rabbit的fanout扇形交换机

    rabbit引入交换机概念. 交换机与生产者绑定. 队列与消费者绑定. 队列又与交换机绑定. 扇形交换机是  fanout类型的. 类似于其他消息中间件的 topic.一对多(生产者推送消息到指定交换 ...

  7. 关于RabbitMQ交换机的理解

    RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.消息中间件主要用于组件之间的解耦,消 ...

  8. RabbitMQ入门(5)——主题(Topic)

    前面我们介绍了通过使用direct exchage,改善了fanout exchange只能进行虚拟广播的方式.尽管如此,直接交换也有自身的局限,它不能基于多个条件路由. 在我们的日志系统中,也许我们 ...

  9. RabbitMQ之交换机及spring整合

    交换机 交换机属性: Name:交换机名称 Type:交换机类型 direct.topic.fanout.headers Durability:是否需要持久化,true为持久化 Auto Delete ...

随机推荐

  1. Mac与iPhone的使用

    1.mac操作 苹果Mac操作系统下怎么显示隐藏文件(shift+cmmand+. ) Mac屏幕录制Gif Mac 键盘快捷键 Mac 上安装python3 2.iPhone操作 iPhone如何设 ...

  2. bzoj2705Longge的问题

    题目链接 题意很简单 $$ans=\sum_{i=1}^{n}gcd(i,n)$$ 然后推一下式子,求一下欧拉函数就好了 细节是由于$BZOJ$的评测计时策略, 不能线性筛啊$……$ 必须每个数单独筛 ...

  3. 打造一款1kb大马并且处理D盾以及安全狗拦截与查杀

    在之前sky666提到了关于大马被waf拦的问题,我决定手动去过一下bypass.可是发现怎么也过不去查杀,更别说拦截了.对此无奈,只好花了个通宵去处理一下.顺便一提,理论过所有Waf,并且被杀只需要 ...

  4. 使用beautifulsoup和pyquery爬小说

    # -*- coding:UTF-8 -*- from bs4 import BeautifulSoup #BeautifulSoup就是处理字符串的工具 import requests, sys & ...

  5. (USB HID) In/Out Report 收發 Function

    在紀錄 In/Out Report 收發之前先來看一下一個struct typedef struct _Device_cb { uint8_t (*Init) (void *pdev , uint8_ ...

  6. [Shell]如何获取Maven工程的project.version信息

    问题: 今天遇到Shell中如何能获取Maven项目工程中的project.version信息的问题 解决方案: 使用Maven的Exec 插件 #! /bin/bash MVN_VERSION=$( ...

  7. Flutter Navigator operation requested with a context that does not include a Navigat

    如下直接在 MaterialApp 中使用 Navigator 是会报 Navigator operation requested with a context that does not inclu ...

  8. storm(4)-topology的组成-stream/spout/blot/

    topology包含:stream.spout.blot. topology会一直运行,除非进程被杀死. 1.stream stream=tuple=event(CEP中的)=发送的报文.键值对(一个 ...

  9. oracle mysql的序列的新增、删除、修改及使用

    序列的使用  参考文献: https://blog.csdn.net/meijory/article/details/51891529 1.序列介绍 序列: 是 oracle 提供的用于产生一系列唯一 ...

  10. Oracle rownum

    本问参考自Oracle中ROWNUM的使用技巧.纯属读书笔记,用于加深记忆 rownum是oracle中的一种伪列,它会根据返回的记录生成一个序列化的数字,利用rownum,我们可以得到一些原先难以得 ...