当前位置: 首页 > news >正文

Java引用RabbitMQ快速入门

这里写目录

  • Java发送消息给MQ
  • 消费者接收消息
  • 实现一个队列绑定多个消费者
    • 消息推送限制
  • Fanout交换机
  • 路由的作用
  • Direct交换机
    • 使用案例

Java发送消息给MQ

    public void testSendMessage() throws IOException, TimeoutException {// 1.建立连接ConnectionFactory factory = new ConnectionFactory();// 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码factory.setHost("117.72.210.37");factory.setPort(5672);factory.setVirtualHost("bthost");factory.setUsername("admin");factory.setPassword("hURA6SxC6YrBFoqt");// 1.2.建立连接Connection connection = factory.newConnection();// 2.创建通道ChannelChannel channel = connection.createChannel();// 3.创建队列String queueName = "simple.queue";channel.queueDeclare(queueName, false, false, false, null);// 4.发送消息String message = "hello, rabbitmq!";channel.basicPublish("", queueName, null, message.getBytes());System.out.println("发送消息成功:【" + message + "】");// 5.关闭通道和连接channel.close();connection.close();}

消费者接收消息

    @RabbitListener(queues = "simple.queue")//指定要监听哪个队列public void listenSimpleQueueMessage(String msg){System.out.println("spring 消费者接收到消息 :【" + msg + "】");throw new RuntimeException("故意的");//MQ会一直投递消息
//        throw new MessageConversionException("故意的");//失败后返回reject不再投递}

实现一个队列绑定多个消费者

在这里插入图片描述

消息推送限制

在这里插入图片描述
如果没有设置限制话不管你上一条消息是否处理完,消费者会一直接收,设置厚只有处理完消息才会接受下一条。
在这里插入图片描述

Fanout交换机

在这里插入图片描述
在这里插入图片描述
将消息发送给交换机

    @Testpublic void testFanoutExchange() throws InterruptedException {//交换机名称String exchangeName = "itcast.fanout";String message = "hello, everyone";//这次是将消息发送到交换机,不再是队列rabbitTemplate.convertAndSend(exchangeName, "",message);}

在这里插入图片描述
接收消息

    @RabbitListener(queues = "fanout.queue1")public void listenFanoutQueue1(String msg) {System.out.println("消费者1接收到Fanout消息:【" + msg + "】");}@RabbitListener(queues = "fanout.queue2")public void listenFanoutQueue2(String msg) {System.out.println("消费者2接收到Fanout消息:【" + msg + "】");}

路由的作用

在这里插入图片描述

Direct交换机

在这里插入图片描述

使用案例

在这里插入图片描述
交换机绑定
在这里插入图片描述

    @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue1"),exchange = @Exchange(name="itcast.direct",type = ExchangeTypes.DIRECT),key = {"red","blue"}))public void listenDirectQueue1(String msg){System.out.println("消费者1接收到Direct消息:【" + msg + "】");}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue2"),exchange = @Exchange(name="itcast.direct",type = ExchangeTypes.DIRECT),key = {"red","yellow"}))
**    @Testpublic void testDirectExchange() {//交换机名称String exchangeName = "itcast.direct";String message = "hello, blue";//这次是将消息发送到交换机,不再是队列rabbitTemplate.convertAndSend(exchangeName, "red", message);}**

在这里插入图片描述
key是谁对应消费者就会接收到对应key的消息

相关文章:

  • PaddlePaddle 和PyTorch选择与对比互斥
  • 关于 js:1. 基础语法与核心概念
  • Python之pip图形化(GUI界面)辅助管理工具
  • Jenkins 改完端口号启动不起来了
  • DTU_DTU厂家_5G/4G DTU终端_DTU模块_厦门计讯物联科技有限公司
  • docker + K3S + Jenkins + Harbor自动化部署
  • 【从零开始学习RabbitMQ | 第二篇】生成交换机到MQ的可靠性保障
  • 数字文明时代开源技术驱动的商业范式重构:基于开源AI大模型、AI智能名片与S2B2C商城小程序源码的协同创新研究
  • weapp-vite - 微信小程序工具链的另一种选择
  • window 显示驱动开发-线程和同步级别为零级
  • Leetcode Hot 100 移动零
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何自动打开“安全性与隐私“控制面板?
  • Docker手动重构Nginx镜像,融入Lua、Redis功能
  • AI量化解析:从暴跌5%到飙涨3%—非线性动力学模型重构黄金极端波动预测框架
  • ApplicationRunner执行顺序问题
  • 深度解读 ARM 全新白皮书——《重塑硅基:AI 时代的新基石》
  • unordered_map和unordered_set的设计
  • 学习alpha,第2个alpha
  • Acrel-EIoT 能源物联网云平台在能耗监测系统中的创新设计
  • Pandas 的透视与逆透视
  • 同为“东部重要中心城市”后交出首份季报:宁杭苏表现如何?
  • 起底新型保健品电话销售诈骗:从快递信息中筛选对象,忽悠其高价买药
  • 超导电路新设计有望提升量子处理器速度
  • 联合国秘书长古特雷斯呼吁印巴保持最大克制
  • 观察|“离境退税”撬动上海“五一”假期入境消费
  • 央视热评:从银幕到生活,好故事如何“撬动”大市场