Rabbitmq(5) 路由模式
设置路由键
发送者
- package com.aynu.bootamqp.service;
- import com.aynu.bootamqp.commons.utils.Amqp;
- import com.rabbitmq.client.Channel;
- import com.rabbitmq.client.Connection;
- import java.io.IOException;
- import java.util.concurrent.TimeoutException;
- public class Send {
- private final static String Exchange_NAME ="hello";
- public static void main(String[] args) throws IOException, TimeoutException {
- Connection connection = Amqp.getConnection();
- Channel channel = connection.createChannel();
- //声明交换机
- channel.exchangeDeclare(Exchange_NAME,"direct");
- //在手动确认机制之前
- //一次只发送一条消息,给不同的消费者
- channel.basicQos(1);
- String message = "hello ps";
- String routingKey ="info";
- channel.basicPublish(Exchange_NAME,routingKey,null,message.getBytes("utf-8"));
- System.out.println(message);
- channel.close();
- connection.close();
- }
- }
接受者1
- package com.aynu.bootamqp.service;
- import com.aynu.bootamqp.commons.utils.Amqp;
- import com.rabbitmq.client.*;
- import java.io.IOException;
- import java.util.concurrent.TimeoutException;
- @SuppressWarnings("all")
- public class Receive {
- private final static String QUEUE_NAME ="hello";
- private final static String Exchange_NAME ="hello";
- public static void main(String[] args) throws IOException, TimeoutException {
- Connection connection = Amqp.getConnection();
- Channel channel = connection.createChannel();
- channel.queueDeclare(QUEUE_NAME,false,false,false,null);
- //绑定队列
- channel.queueBind(QUEUE_NAME,Exchange_NAME,"error");
- // 一次只处理一个消息
- channel.basicQos(1);
- DefaultConsumer consumer = new DefaultConsumer(channel) {
- @Override
- public void handleDelivery(String consumerTag, Envelope envelope,
- AMQP.BasicProperties properties, byte[] body) throws IOException {
- super.handleDelivery(consumerTag, envelope, properties, body);
- String msg = new String(body,"utf-8");
- System.out.println("receive"+msg);
- try {
- Thread.sleep(1000*2);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }finally {
- // 手动发送消息确认机制
- channel.basicAck(envelope.getDeliveryTag(),false);
- }
- }
- };
- // 自动应答
- boolean autoAck = false;
- channel.basicConsume(QUEUE_NAME,autoAck,consumer);
- }
- }
接受者2
- package com.aynu.bootamqp.service;
- import com.aynu.bootamqp.commons.utils.Amqp;
- import com.rabbitmq.client.*;
- import java.io.IOException;
- import java.util.concurrent.TimeoutException;
- @SuppressWarnings("all")
- public class Receive2 {
- private final static String QUEUE_NAME ="hello1";
- private final static String Exchange_NAME ="hello";
- public static void main(String[] args) throws IOException, TimeoutException {
- Connection connection = Amqp.getConnection();
- Channel channel = connection.createChannel();
- channel.queueDeclare(QUEUE_NAME,false,false,false,null);
- channel.queueBind(QUEUE_NAME,Exchange_NAME,"info");
- channel.queueBind(QUEUE_NAME,Exchange_NAME,"error");
- channel.queueBind(QUEUE_NAME,Exchange_NAME,"warning");
- channel.basicQos(1);
- DefaultConsumer consumer = new DefaultConsumer(channel) {
- @Override
- public void handleDelivery(String consumerTag, Envelope envelope,
- AMQP.BasicProperties properties, byte[] body) throws IOException {
- super.handleDelivery(consumerTag, envelope, properties, body);
- String msg = new String(body,"utf-8");
- System.out.println("receive2222"+msg);
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }finally {
- // 手动发送消息确认机制
- channel.basicAck(envelope.getDeliveryTag(),false);
- }
- }
- };
- boolean autoAck = false;
- channel.basicConsume(QUEUE_NAME,autoAck,consumer);
- }
- }
Rabbitmq(5) 路由模式的更多相关文章
- RabbitMQ 的路由模式 Topic模式
模型 生产者 package cn.wh; import java.io.IOException; import java.util.concurrent.TimeoutException; impo ...
- rabbitMQ的三种路由模式
rabbitMQ工作流程: 1.声明交换机 2.声明消息队列 3.绑定交换机和队列 4.生产者往交换机里发送新消息 5.交换机根据所选的模式和routingKey决定消息发往哪条消息队列 6.一个消费 ...
- RabbitMQ (六) 订阅者模式之路由模式 ( direct )
路由模式下,生产者发送消息时需要指定一个路由键(routingKey),交换机只会把消息转发给包含该路由键的队列 这里,我们改变一下声明交换机的方式. 我们通过管理后台添加一个交换机. 添加后,生产者 ...
- RabbitMQ六种队列模式-路由模式
前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式 [本文]RabbitMQ六种队列模式-主 ...
- RabbitMQ学习第四记:路由模式(direct)
1.什么是路由模式(direct) 路由模式是在使用交换机的同时,生产者指定路由发送数据,消费者绑定路由接受数据.与发布/订阅模式不同的是,发布/订阅模式只要是绑定了交换机的队列都会收到生产者向交换机 ...
- RabbitMQ 一二事(4) - 路由模式介绍
路由模式其实和订阅模式差不多,只不过交换机的类型不同而已 路由模式可以用下图来表示,比订阅模式多了一个key,举个栗子就是根据不同的人群来订阅公众号,来收取消息 根据不同的key来获取不同的消息 最简 ...
- python使用rabbitMQ介绍四(路由模式)
一.模式介绍 路由模式,与发布-订阅模式一样,消息发送到exchange中,消费者把队列绑定到exchange上. 这种模式在exchange上添加添加了一个路由键(routing-key),生产者发 ...
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_10.RabbitMQ研究-工作模式-路由工作模式介绍
队列在绑定交换机的时候可以指定routingKey, 路由模式: 1.每个消费者监听自己的队列,并且设置routingkey. 2.生产者将消息发给交换机,由交换机根据routingkey来转发消息到 ...
- 【RabbitMQ】工作模式介绍
一.前言 之前,笔者写过< CentOS 7.2 安装 RabbitMQ> 这篇文章,今天整理一下 RabbitMQ 相关的笔记便于以后复习. 二.模式介绍 在 RabbitMQ 官网上提 ...
随机推荐
- faker模块
faker模块中有很多函数,可以直接生成手机号,身份证号,姓名等 1.安装faker pip install faker 2.faker的使用 from faker import Faker f=Fa ...
- springcloud Ribbon学习笔记一
上篇已经介绍了如何开发eureka服务并让多个服务进行相互注册,接下来记录如何开发一个服务然后注册到eureka中并能通过ribbon成功被调用 开发一个用户服务并注册到eureka中,用户服务负责访 ...
- idea中文输入法无提示问题的解决
中文输入法无提示问题的解决 双击Shift键打开Search Everywhere,输入Switch Boot JDK,选择 Switch IDE boot JDK...菜单,然后点击...设置Ora ...
- vscode 插件推荐 - 献给所有前端工程师(更新与2018.8.1)
VScode现在已经越来越完善.性能远超Atom和webstorm,你有什么理由不用它?在这里,我会给你们推荐很多实用的插件,让你对 vscode 有更深刻的体会,渐渐地你就会知道它有多好用. 走马观 ...
- Power BI和 Visio 集成优缺点
Power BI 的 Visio 自定义视觉,这个功能是非常值得让人兴奋的,小悦相信这是一个非常重要的开发,不仅适用于 Visio,也适用于Power BI.现在已经有越来越多的可视化,它们以更简洁的 ...
- [LeetCode&Python] Problem 504. Base 7
Given an integer, return its base 7 string representation. Example 1: Input: 100 Output: "202&q ...
- ArcSDE账户频繁被锁定(Oracle显示12560协议适配器错误)
最近遇到了一个比较奇葩的问题,启动系统的时候无法显示地图服务,查找原因时发现无法连接Oracle.出现以下错误: 之前遇到这种问题,通常是由于同时安装了64位和32位Oracle客户端,且二者的环境变 ...
- js空数组
首先我们定义一个空的数组: var a = [ ]; 数组a里面是空的没有值,接下来我们打印: console.log(!!a); 因为数组是空的,此处应该为false. 恰好相反,!!a为true. ...
- XXS level7
(1)输入与第六关相同的Payload:"><A HREF="javascript:alert()"> 查看页面源代码,发现“herf"被过滤 ...
- this指向问题 --无return
this的指向在函数定义的时候是确定不了的只有在函数执行的时候才能确定this到底指向谁.this指向上一级对象 1.函数调用,this指向window var color = "red&q ...