Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >通配符模式 topic

通配符模式 topic

作者头像
用户5927264
发布于 2019-08-01 02:23:36
发布于 2019-08-01 02:23:36
78400
代码可运行
举报
文章被收录于专栏:OSChinaOSChina
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.shi.topic;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import org.junit.Test;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConsumerCancelledException;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.ShutdownSignalException;
import com.rabbitmq.client.QueueingConsumer.Delivery;
import com.shi.util.RabbitMqUtils;

/**
 * 通配符模式  - topic
 * @author SHF
 * @version 创建时间:2018年7月4日  下午5:53:29
 */
public class TopicTest {
	
	//交换机名称
		private final static String EXCHANGE_NAME = "exchange_topic";
		//路由 key
		private final static String KEY_1 ="a.1";
		private final static String KEY_2 ="key.*";
		private final static String KEY_3 ="#.#";
		
		//队列名称
		private final static String QUEUE_1 ="queue_topic_1";
		private final static String QUEUE_2 ="queue_topic_2";
		
		/**
		 * 生产者 - 路由模式
		 * KEY_1 ="a";
		 * @author SHF
		 * @version 创建时间:2018年7月4日  下午4:20:39
		 * @throws TimeoutException 
		 * @throws IOException 
		 */
		@Test
		public void send()throws IOException, TimeoutException {
			//1 获取链接及mq 通道
			Connection connection = RabbitMqUtils.getConnection();
			Channel channel = connection.createChannel();
			
			//2 声明exchange
			channel.exchangeDeclare(EXCHANGE_NAME, "topic");
			
			//3 消息内容
			String message = " 施爷 通配符模式 topic 向你发送了一条消息....";
			channel.basicPublish(EXCHANGE_NAME, KEY_1, null, message.getBytes());
			System.out.println(" [x] sent:"+message);
			
			//4关闭通道及连接
			channel.close();
			connection.close();
		}
		
		/**
		 * 消费者1 - 路由模式
		 * KEY_2 ="b";
		 * @author SHF
		 * @version 创建时间:2018年7月4日  下午4:33:55
		 * @throws TimeoutException 
		 * @throws IOException 
		 * @throws InterruptedException 
		 * @throws ConsumerCancelledException 
		 * @throws ShutdownSignalException 
		 */
		@Test
		public void reic1() throws IOException, TimeoutException, ShutdownSignalException, ConsumerCancelledException, InterruptedException {
			//1 获取连接 及 通道
			Connection connection = RabbitMqUtils.getConnection();
			Channel channel = connection.createChannel();
			
			//2 声明队列
			channel.queueDeclare(QUEUE_1, false, false, false, null);
			
			//3 绑定交换机,指定路由
			channel.queueBind(QUEUE_1, EXCHANGE_NAME, KEY_2);
			
			//4 同一个服务器只会发送一条消息给消费者
			channel.basicQos(1);
			
			//5 定义队列的消费者
			QueueingConsumer consumer = new QueueingConsumer(channel);
			
			//6 监听队列,手动返回完成
			channel.basicConsume(QUEUE_1, false,consumer);
			
			//7 获取消息
			while(true) {
				Delivery delivery = consumer.nextDelivery();
				String message = new String(delivery.getBody());
				System.out.println( "[x] reiv1 :" + message);
				
				channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
			}
		}
		
		
		/**
		 * 消费者2 - 路由模式
		 * KEY_3 ="a"
		 * @author SHF
		 * @version 创建时间:2018年7月4日  下午4:33:55
		 * @throws TimeoutException 
		 * @throws IOException 
		 * @throws InterruptedException 
		 * @throws ConsumerCancelledException 
		 * @throws ShutdownSignalException 
		 */
		@Test
		public void reic2() throws IOException, TimeoutException, ShutdownSignalException, ConsumerCancelledException, InterruptedException {
			//1 获取连接 及 通道
			Connection connection = RabbitMqUtils.getConnection();
			Channel channel = connection.createChannel();
			
			//2 声明队列
			channel.queueDeclare(QUEUE_2, false, false, false, null);
			
			//3 绑定交换机,指定路由
			channel.queueBind(QUEUE_2, EXCHANGE_NAME, KEY_3);
			
			//4 同一个服务器只会发送一条消息给消费者
			channel.basicQos(1);
			
			//5 定义队列的消费者
			QueueingConsumer consumer = new QueueingConsumer(channel);
			
			//6 监听队列,手动返回完成
			channel.basicConsume(QUEUE_2, false,consumer);
			
			//7 获取消息
			while(true) {
				Delivery delivery = consumer.nextDelivery();
				String message = new String(delivery.getBody());
				System.out.println( "[x] reiv2 :" + message);
				
				channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
			}
		}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
路由模式 - direct
package com.shi.rout; import java.io.IOException; import java.util.concurrent.TimeoutException; im
用户5927264
2019/08/01
6610
路由模式 - direct
订阅模式 - fanout
package com.shi.ps; import java.io.IOException; import java.util.concurrent.TimeoutException; impo
用户5927264
2019/08/01
4990
订阅模式 - fanout
Work模式
模式是一个生产者多个消费者模式,一个消息只能别一个消费者消费 package com.shi.work; import java.io.IOException; import java.util.c
用户5927264
2019/08/01
4230
Work模式
rabbitMQ-simple 简单模式
1 导入依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchem
用户5927264
2019/08/01
2020
rabbitMQ-simple 简单模式
RabbitMq七种工作模式,java实战案例分享,别再说你不会!
最简单的一个消费者和一个生产者模式,生产者生成消息,消费者监听消息,若是消费者监听到它所需要的消息,就会消费该消息,这种消息是次性的,被消费了就没有了。
Java程序猿
2021/03/26
4750
RabbitMQ详解解答【面试+工作】
如果安装rabbitMQ首先安装基于erlang语言支持的OTP软件,然后在下载rabbitMQ软件进行安装(安装过程都是下一步,在此不在说了)
Java帮帮
2018/09/29
1.5K0
RabbitMQ详解解答【面试+工作】
RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)
> 公众号:[Java小咖秀](https://t.1yb.co/jwkk),网站:[javaxks.com](https://www.javaxks.com)
Java小咖秀
2021/04/09
1.5K0
RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)
RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)
做最简单的事情,一个生产者对应一个消费者,RabbitMQ相当于一个消息代理,负责将A的消息转发给B 应用场景: 将发送的电子邮件放到消息队列,然后邮件服务在队列中获取邮件并发送给收件人 工作队列模式(Work queues)
程序员小强
2021/04/29
3640
RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)
RabbitMQ极速入门
消息中间件是目前比较流行的一个中间件,其中RabbitMQ更是占有一定的市场份额,主要用来做异步处理、应用解耦、流量削峰、日志处理等等方面。
sowhat1412
2020/11/05
1K0
RabbitMQ极速入门
RabitMQ&Java使用说明
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
俺也想起舞
2020/07/01
4700
RabbitMQ详解(三)------RabbitMQ的五种队列
  上一篇博客我们介绍了RabbitMQ消息通信中的一些基本概念,这篇博客我们介绍 RabbitMQ 的五种工作模式,这也是实际使用RabbitMQ需要重点关注的。
IT可乐
2018/07/24
8270
RabbitMQ详解(三)------RabbitMQ的五种队列
RabbitMQ系列(五)Topic模型
上一篇文章《RabbitMQ系列(四)通信模型之路由模型》中,简单的介绍了一下RabbitMQ的路由模型。这篇文章来学习一下RabbitMQ中的topic模型,Topic 模型是 RabbitMQ 的高级模型之一,Topic 模型使用了通配符的概念,可以匹配更灵活的路由规则。topic模式相当于是对路由模式的一个升级,topic模式主要就是在匹配的规则上可以实现模糊匹配。
Jensen_97
2023/07/20
2200
springboot-RabbitMQ发送短信
Kafka不管是消费成功还是失败,都不会立即从mq服务端中移除,使用offset记录消息消费情况
阿超
2022/08/16
9.1K0
springboot-RabbitMQ发送短信
RabbitMQ使用教程(超详细)
下载地址:http://www.rabbitmq.com/download.html
全栈程序员站长
2022/07/21
2.8K1
RabbitMQ使用教程(超详细)
RabbitMQ六种工作模式
2.Work queue 生产者传入多个消费者进行处理,每条消息只能被一个消费者拿到。
你的益达
2020/09/30
4730
RabbitMQ六种工作模式
RabbitMQ Topic(通配符)工作模式
红色 Queue:绑定的是 usa.# ,因此凡是以 usa. 开头的 routing key 都会被匹配到 黄色 Queue:绑定的是 #.news ,因此凡是以 .news 结尾的 routing key 都会被匹配,
兰舟千帆
2022/08/03
4620
RabbitMQ Topic(通配符)工作模式
RabbitMQ In JAVA 介绍及使用
  RabbitMQ是开源的消息中间件,它是轻量级的,支持多种消息传递协议,可以部署在分布式和联合配置中,以满足高级别、高可用性需求。并且可在许多操作系统和云环境上运行,并为大多数流行语言提供了广泛的开发工具。(这里只介绍JAVA下的RabbitMQ的使用,感兴趣的可以查看官方文档:http://www.rabbitmq.com/getstarted.html);
2019/02/21
7460
RabbitMQ In JAVA 介绍及使用
【RabbitMQ】RabbitMQ应用
官方安装指南:https://www.rabbitmq.com/install-rpm.html
瑞新
2021/11/08
1.9K0
MQ教程 | RabbitMQ 简单队列 hello world [Java版](三)
那么我们根据以上的模型,咱们抽取出 3 个对象 生产者(用户发送消息) 队列(中间件):类似于容器(存储消息) 消 费者(获取队列中的消息)
Tinywan
2019/07/16
7520
MQ教程 | RabbitMQ 简单队列 hello world [Java版](三)
05-RabbitMQ控制台入门及其Java简单操作
路由键: 就是指发送到Exchange的消息, 通过路由键的匹配规则, 分发到指定的Queue
彼岸舞
2022/10/06
2550
05-RabbitMQ控制台入门及其Java简单操作
相关推荐
路由模式 - direct
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验