主题交换机类型为: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. 原生态js展开收缩

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. go语言实战教程:Redis实战项目应用

    项目Redis配置 在实战项目中使用Redis功能,首先需要进行Redis配置.本实战项目中,关与Redis的配置项包含:连接类型.地址.端口.公共前缀.以上配置项被定义包含在Iris框架的redis ...

  3. Python一篇学会多进程

    阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiprocessing python 中的多 ...

  4. [Flex] 组件Tree系列 —— 运用LabelFunction hasChildren getChildren设置Tree包含节点个数

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:运用LabelFunction h ...

  5. 提高 iOS App 通知功能启用率的三个策略

    我们都知道推送通知在 App 运营中的作用巨大.但是,很多用户却并不买帐,App 第一次启动提示是否「启用推送通知」时,他们直接选择了「否」. 是的,最近我本人就转变成了这样的人 - 认真地评估每个应 ...

  6. myeclipse上down出的svn项目,文件后面不显示版本号和修改人

    找到 windows ->preferences->General->Appearance->Lable Decorations 下拉找到svn 勾选上

  7. StringBuffer类和String类的区别

    StringBuffer是使用缓冲区的,本身也是操作字符串的,但与String类不同,String类的内容一旦声明后是不可改变的,改变的只是其内存的指向,而StringBuffer类的对象内容是可以改 ...

  8. Locust HTTP client

    Http client 默认是以安全模式运行的,任何由于连接错误.超时或者类似错误引起的异常,都会返回一个空的Response对象,这个请求将会再locust统计中标记为failure,返回的虚拟对象 ...

  9. shell map使用

    # 定义初始化map declare -A map=([") # 输出所有key echo ${map[@]} # 输出key对应的值 "]} # 遍历map for key in ...

  10. 安装Telerik JustMock插件后启动不成功

    1.打开Telerik JustMock Configuration 勾选所有框 2.到C:\Program Files (x86)\Progress\Telerik JustMock\Librari ...