主题交换机类型为: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. java的排序算法

    分享网页:https://yq.aliyun.com/articles/136085?utm_content=m_26483

  2. [AIR] 检测移动设备运动

    Accelerometer 类根据由设备的运动传感器检测的活动调度事件.此数据表示设备的位置或沿三维轴的移动.当设备移动时,传感器会检测到此移动并返回加速数据.Accelerometer 类提供了各种 ...

  3. NOIP模拟赛

    T1 1.聪明的小偷 (thief.pas/c/cpp) [问题描述] 从前有一个收藏家收藏了许多相同的硬币,并且将它们放在了n个排成一排的口袋里,每个口袋里都装了一定数量的硬币. 这些硬币价值不菲, ...

  4. Unity 行为树-中断机制

    一.中断类型 设置了中断之后,行为树会检测执行过的子条件节点,当条件节点的状态发生变化时,会中断正在执行的Running节点,转而立即执行该条件节点. 行为树的打断类型有4种: None Self L ...

  5. React第一篇: 搭建React + nodejs + express框架

    前提: 需要安装Node.js (>6)版本 1.cmd进到本地某个目录, 逐行输入以下指令(以下括号为注释) npm install -g create-react-app   (全局安装cr ...

  6. 设置第三方的SMTP服务

    取得授权码:

  7. Oracle 数据库创建、表空间创建、用户创建 步骤

    一.数据库创建: 1.利用数据库配置助手(DBCA,Database Configuration Assistant)图形化方式 2.创建完成之后,找到  D:\oracle\product\11.2 ...

  8. GIF图制作

    一.安装image 首先在cmd中敲入代码pip install imageio,以便制作动图 二.安装完之后便可读取gif了 在idle中输入代码 import imageio savename = ...

  9. java的值传递

    java中都是值传递 如果参数是引用类型的,实际上是把引用地址复制了一份传递 例如 User user = new User(); user存放在栈中,里面存放着内存地址,new User()会在堆中 ...

  10. jmeter调试脚本之变量参数化

    前言 对于参数化,觉得用得最多的应该是csvread函数.csv data config以及用户自定义变量(前一篇文章已经进行了讲解)控制器这几个 案例:bugfree ,提交bug,参数bug名称和 ...