rabbitmq路由模式
时间:2019-10-07
本文章向大家介绍rabbitmq路由模式,主要包括rabbitmq路由模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.依赖:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- 消息队列 --> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.5.1</version> </dependency>
2.消息提供者
public class Test_4_direct_provider { // 向消息队列写消息 @Test public void provider() throws Exception { // 1,连接服务器 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("192.168.216.202"); // 浏览器访问rabbitmq后台管理用的是15672 // 发消息用的的5672 // 一个服务器可以有多个端口号,访问15672,服务器返回的是网页 // 访问5672,可以发消息,也可以取消息 factory.setPort(5672); factory.setUsername("jtadmin"); factory.setPassword("jtadmin"); factory.setVirtualHost("/jt"); // 2,得到channel // com.rabbitmq.client.connection Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 定义交换机 String exchangeName = "E2"; // fanout 订阅模式 // direct 路由模式 // topic 主题模式 channel.exchangeDeclare(exchangeName, "direct"); // channel.queueDeclare("order", true, false,false, null); // 4,写消息 boolean isRunning = true; String msg = "msg 01"; String routingKey = "mobile"; BasicProperties properties = null; channel.basicPublish(exchangeName, routingKey, properties, msg.getBytes()); // 5,关闭连接 channel.close(); connection.close(); // System.out.println("发送了" + msg); } }
3.消息接收者
public class Test_4_direct_consumer1 { // 从消息队列服务器取消息 @Test public void consumer() throws Exception { // 1.建立连接 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("192.168.216.202"); factory.setPort(5672); factory.setUsername("jtadmin"); factory.setPassword("jtadmin"); factory.setVirtualHost("/jt"); // 2,得到channel // com.rabbitmq.client Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); String exchangeName = "E2"; // 创建交换机 // fanout 订阅模式 // direct 路由模式 // topic 主题模式 channel.exchangeDeclare(exchangeName, "direct"); String queueName = "E2 queue1"; // p2:durable true 持久化,保存到硬盘 boolean durable = true; // p3:exclusive false 别的程序也能访问 boolean exclusive = false; // p4:autoDelete false 队列中的消息处理完了,不删队列 boolean autoDelete = false; channel.queueDeclare(queueName, durable, exclusive, autoDelete, null); // 把队列和交换机绑定 channel.queueBind(queueName, exchangeName, "mobile"); // 设置每次取几个数据 channel.basicQos(1); // 4,得到消费者 // 创建的consumer通过channel来读数据 QueueingConsumer consumer = new QueueingConsumer(channel); // 去取数据 // p2:autoack 开启手动确认 boolean autoAck = false; channel.basicConsume(queueName, autoAck, consumer); // 5,遍历消费者consumer boolean isRunning = true; System.out.println("消费者1启动了"); while (isRunning) { // delivery代表的是消息队列中的一个数据 Delivery delivery = consumer.nextDelivery(); byte[] body = delivery.getBody(); String msg = new String(body); System.out.println("消费者1收到:" + msg + "发手机"); // 不发送确认信息,服务器上能看到队列中的消息 long deliveryTag = delivery.getEnvelope().getDeliveryTag(); channel.basicAck(deliveryTag, true); } // 6,连接关闭 channel.close(); connection.close(); } }
4.总结
原文地址:https://www.cnblogs.com/gxlaqj/p/11630868.html
- PostCSS 插件postcss-lazyimagecss:自动填写width / height 属性
- Angularjs基础(十)
- Mac 中JetBrain 系列IDE 的配置文件同步(通过Dropbox)
- 面向服务架构(SOA)和企业服务总线(ESB)
- UPS宣布加入货运区块链联盟 价值万亿的物流行业未来将无纸化?
- Android中动态更新ListView
- 关于机器学习,这可能是目前最全面最无痛的入门路径和资源!
- 并行计算Brahma :LINQ-to-GPU
- 实例演示Android异步加载图片
- Eclipse快捷键大全
- Entity Framework 和NHibernate的区别
- Angularjs基础(九)
- Silverlight 2 应用程序部署到任意HTML页面
- 人工智能积极赋能保险业
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Leetcode 300. 最长上升子序列(n方dp,nlogn贪心+二分查找)
- select 进阶查询
- Codeforces Round #627 (Div. 3) E. Sleeping Schedule (DP)
- PAT (Advanced Level) Practice 1144 The Missing Number (20分)
- JDBC 基础操作
- Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) C. Remove Adjacent
- MySQL 存储过程
- MySQL 约束
- MySQL 中的流程控制语句
- MySQL 权限操作
- MySQL 事务
- Java 随机生成四则运算式并生成答案
- MySQL 常用函数汇总
- Leetcode 698. 划分为k个相等的子集
- java数据结构与算法-快速排序