1.1Work queues工作队列模式

1.1.1 入门程序

完成简单模式的消息传递

生产者代码:

//1.创建连接工厂ConnectionFactory factory = new ConnectionFactory();//2.设置参数factory.setHost("172.155.10.100");factory.setPort(5672);factory.setVirtualHost("/study");factory.setUsername("admin");factory.setPassword("admin");//3. 创建连接ConnectionConnection connection = factory.newConnection();//4. 创建channelChannel channel = connection.createChannel();//5. 创建队列 queue/*** 参数* queue: 队列名称* durable:是否持久化* exclusive:是否独占,只能有一个消费者监听这队列*            当Connection关闭时,是否删除队列* autoDelete:是否自动删除,当没有Consumer时,自动删除掉*///若没有明教hello_world的队列,则会创建该队列,如果有则不会创建channel.queueDeclare("hello_world", true, false, false, null);/*** exchange: 交换机名称,简单模式下交换机默认使用 “”* routingKey:路由名称* props:配置信息* body: 发送消息数据*///发送消息channel.basicPublish("", "hello_world", null, message.getBytes());channel.close();connection.close();

消费者代码:

//1.创建连接工厂ConnectionFactory factory = new ConnectionFactory();//2.设置参数factory.setHost("172.155.10.100");factory.setPort(5672);factory.setVirtualHost("/study");factory.setUsername("admin");factory.setPassword("admin");//3. 创建连接ConnectionConnection connection = factory.newConnection();//4. 创建channelChannel channel = connection.createChannel();/*** basicConsume(String name, boolean autoAck, Consumer, callback* queue: 队名称* autoAck: 是否自动确认* callback:回调对象*/com.rabbitmq.client.Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body){System.out.println("需要打印的东东");}};channel.basicConsume("hello_world", true, consumer);

1.1.2 工作模式

  • Work Queues:与入门程序的简单模式相比,多了一个或一些消费端,多个消费端共同消费
  • 应用场景: 对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度
    代码即拷贝一份消费者,两个消费者同时消费队列中的消息,相互之间并不影响,即同一份数据可以同时被C1和C2消费

1.1.3 PUB/Sub订阅模式


订阅模型中,多了一个Exchange角色,而且过程略有变化

  • P:生产者,不再发送到队列中,而是发送给交换机
  • C:消费者,消息的接收者,会一直等待消息到来
  • Exchange:只负责转发消息,不具备存储消息的功能,因此如果没有任何队列与Exchange绑定,或者没有路由规则的队列,那么消息会丢失

生产者代码:

//1.创建连接工厂ConnectionFactory factory = new ConnectionFactory();//2.设置参数factory.setHost("172.155.10.100");factory.setPort(5672);factory.setVirtualHost("/study");factory.setUsername("admin");factory.setPassword("admin");//3. 创建连接ConnectionConnection connection = factory.newConnection();//4. 创建channelChannel channel = connection.createChannel();//5. 创建交换机/*** exchange: * type:交换机类型* durable:是否车九华* autoDelete: 发送消息数据* internal: 是否内部使用 一般false* argument:参数*/String exchangeName = "test_fanout";channel.exchangeDeclare(exchangeName, BuiltinExchangeType.FANOUT, true, true, false, null);//6. 创建队列channel.queueDeclare("testQueue1", true, false, false, null);//7. 绑定队列和交换机  第一个参数队列名称,第二个交换机名称,第三个为路由规则channel.queueBind("testQueue1", exchangeName, "");channel.basicPublish("", "hello_world", null, message.getBytes());channel.close();connection.close();

消费者代码基本一致

1.1.4 Routing路由模式

  • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey
  • 消息的发送方再向Exchange发送消息时,也必须指定消息的RoutingKey
  • Exchange不再把消息交给每一个绑定的队列,而是根据RoutingKey进行判断,只有队列RoutingKey鱼消息的RoutingKey完全一直,才会接受到消息

    生产者代码:
//1.创建连接工厂ConnectionFactory factory = new ConnectionFactory();//2.设置参数factory.setHost("172.155.10.100");factory.setPort(5672);factory.setVirtualHost("/study");factory.setUsername("admin");factory.setPassword("admin");//3. 创建连接ConnectionConnection connection = factory.newConnection();//4. 创建channelChannel channel = connection.createChannel();//5. 创建交换机/*** exchange: * type:交换机类型* durable:是否车九华* autoDelete: 发送消息数据* internal: 是否内部使用 一般false* argument:参数*/String exchangeName = "test_direct";channel.exchangeDeclare(exchangeName, BuiltinExchangeType.DIRECT, true, true, false, null);//6. 创建队列String queue1Name = "test_direct_queue1";String queue2Name = "test_direct_queue2";channel.queueDeclare(queue1Name, true, false, false, null);channel.queueDeclare(queue2Name, true, false, false, null);//7. 绑定队列和交换机  第一个参数队列名称,第二个交换机名称,第三个为路由规则channel.queueBind(queue1Name, exchangeName, "error");channel.queueBind(queue2Name, exchangeName, "info");channel.queueBind(queue2Name, exchangeName, "warn");channel.queueBind(queue2Name, exchangeName, "error");channel.basicPublish(exchangeName, "hello_world", null, message.getBytes());channel.close();connection.close();

1.1.4 Topics通配符模式


*代表一个单词,#代表0个或多个单词
生产者代码“

//1.创建连接工厂ConnectionFactory factory = new ConnectionFactory();//2.设置参数factory.setHost("172.155.10.100");factory.setPort(5672);factory.setVirtualHost("/study");factory.setUsername("admin");factory.setPassword("admin");//3. 创建连接ConnectionConnection connection = factory.newConnection();//4. 创建channelChannel channel = connection.createChannel();//5. 创建交换机/*** exchange: * type:交换机类型* durable:是否车九华* autoDelete: 发送消息数据* internal: 是否内部使用 一般false* argument:参数*/String exchangeName = "test_topic";channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC, true, true, false, null);//6. 创建队列String queue1Name = "test_topic_queue1";String queue2Name = "test_topic_queue2";channel.queueDeclare(queue1Name, true, false, false, null);channel.queueDeclare(queue2Name, true, false, false, null);//7. 绑定队列和交换机  第一个参数队列名称,第二个交换机名称,第三个为路由规则channel.queueBind(queue1Name, exchangeName, "#.error");channel.queueBind(queue2Name, exchangeName, "order.*");channel.queueBind(queue2Name, exchangeName, "*.*");channel.basicPublish(exchangeName, "hello_world", null, message.getBytes());channel.close();connection.close();

RabbitMQ学习(二)—— 代码实战相关推荐

  1. 【机器学习】Ensemble Learning 集成学习 + Python代码实战

    文章目录 一.集成学习概述 二.Bagging模型 2.1 随机森林 2.1.1 随机森林介绍 2.2.1 随机森林优势 2.2 KNN 2.3 软投票 2.4 硬投票 2.5 Bagging模型实战 ...

  2. OAuth2学习(二)——OAuth2实战

    在上一篇文章中我们讲解了OAuth2的一些基本概念,对OAuth2有了基本的认识.这一节内容我们就讲解一下OAuth2实战,围绕OAuth2的基本类型进行实战讲解. 授权码模式(authorizati ...

  3. RabbitMQ学习二

    RabbitMQ 是一个消息broker.它的主要概念就是接受和转发消息.可以把它当作一个邮局:当向邮箱投递一封邮件时,你确信邮差最终会将这封邮件投递到收件人.使用这个比喻,RabbitMQ就是邮箱, ...

  4. RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列

    上一篇已经讲了Rabbitmq如何在Windows平台安装,不懂请移步:RabbitMQ学习系列一:windows下安装RabbitMQ服务 一.理论: .net环境下,C#代码调用RabbitMQ消 ...

  5. 吴恩达《深度学习专项》笔记+代码实战(二):简单的神经网络——逻辑回归

    这堂课要学习的是逻辑回归--一种求解二分类任务的算法.同时,这堂课会补充实现逻辑回归必备的数学知识.编程知识.学完这堂课后,同学们应该能够用Python实现一个简单的小猫辨别器. 前排提示:本文篇幅较 ...

  6. 深度学习多变量时间序列预测:卷积神经网络(CNN)算法构建时间序列多变量模型预测交通流量+代码实战

    深度学习多变量时间序列预测:卷积神经网络(CNN)算法构建时间序列多变量模型预测交通流量+代码实战 卷积神经网络,听起来像是计算机科学.生物学和数学的诡异组合,但它们已经成为计算机视觉领域中最具影响力 ...

  7. 深度学习二(Pytorch物体检测实战)

    深度学习二(Pytorch物体检测实战) 文章目录 深度学习二(Pytorch物体检测实战) 1.PyTorch基础 1.1.基本数据结构:Tensor 1.1.1.Tensor数据类型 1.1.2. ...

  8. 【强化学习】Sarsa算法求解悬崖行走问题 + Python代码实战

    文章目录 一.Sarsa算法简介 1.1 更新公式 1.2 预测策略 1.3 详细资料 二.Python代码实战 2.1 运行前配置 2.2 主要代码 2.3 运行结果展示 2.4 关于可视化寻路过程 ...

  9. 【强化学习】优势演员-评论员算法(Advantage Actor-Critic , A2C)求解倒立摆问题 + Pytorch代码实战

    文章目录 一.倒立摆问题介绍 二.优势演员-评论员算法简介 三.详细资料 四.Python代码实战 4.1 运行前配置 4.2 主要代码 4.2.1 网络参数不共享版本 4.2.2 网络参数共享版本 ...

  10. 统计学习导论之R语言应用(四):分类算法R语言代码实战

    统计学习导论之R语言应用(ISLR) 参考资料: The Elements of Statistical Learning An Introduction to Statistical Learnin ...

最新文章

  1. 【kafka】confluent_kafka重置offset
  2. 运维基础(9)Linux性能调优三大系统
  3. Kubernetes数据持久化方案
  4. strstr和strcchr查找字符串和区别
  5. mysqlfor循环中出错继续_运维大佬教你“打僵尸”——处理Linux系统中大量的僵尸进程(2)...
  6. Windows10 关闭自动更新
  7. CocoStudio简介
  8. Stanford Dogs Dataset(斯坦福狗数据集)
  9. Android 端发送邮件
  10. python版js压缩工具
  11. 《Did I Buy the Wrong Gadget?How the Evaluability of Technology Features Influences...》中英文对比文献翻译
  12. FLASH外部链接的几种方法
  13. “直接基于成本法”与“模拟权益法”两种合并报表模式比较与分析:响应新准则
  14. 智能优化算法——灰狼优化算法(PythonMatlab实现)
  15. Pytorch可视化_cartopy+matplotlib_绘制雷达图像
  16. GNSS/INS组合导航笔记
  17. 名空间(namespace)
  18. GOOGLE使用指南
  19. 侠客精神 与 程序员的梦想
  20. Subversion简介

热门文章

  1. 2021年土建方向-岗位技能(质量员)考试报名及土建方向-岗位技能(质量员)免费试题
  2. js Object.freeze(obj)冻结一个对象或者一个数组,使其不能发生变化
  3. 机器学习之数据探索——数据特征分析(对比分析与统计量分析)
  4. 自制U盘安装xin7系统
  5. 华北电力大学毕业论文格式修改---EndNote插入参考文献的各种错误修改%J、endnote自动定位参考文献
  6. 消灭老鼠 有一只老鼠,在一个环形的田埂上挖了n个老鼠洞,这些洞也是连接为一个环状,我们要用泥土填满这些鼠洞,老鼠从第0号洞开始出现(第0号洞不填),然后依次按每间隔m个洞出现一次。我们要跟在老鼠后
  7. 雷达距离、目标角度、目标方位和目标速度的测量方法简介
  8. Gflags简单使用
  9. 3D建模初学者必学运算操作
  10. 力扣剑指offer53-||0~n-1中缺失的数字