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

东莞网站seo价格中文网站开发语言

东莞网站seo价格,中文网站开发语言,c h5网站开发,sem是什么职业文章目录 1.Fanout(广播模式)1.基本介绍2.需求分析3.具体实现1.编写配置类 RabbitMQConfig.java2.编写生产者,发送消息到交换机 MQSender.java3.编写消费者,接受消息 MQReceiver.java4.控制层调用方法,发送信息到交换机…

文章目录

    • 1.Fanout(广播模式)
        • 1.基本介绍
        • 2.需求分析
        • 3.具体实现
          • 1.编写配置类 RabbitMQConfig.java
          • 2.编写生产者,发送消息到交换机 MQSender.java
          • 3.编写消费者,接受消息 MQReceiver.java
          • 4.控制层调用方法,发送信息到交换机
        • 4.启动测试
          • 1.访问查看IDEA控制台输出
            • 1.访问 http://localhost:9092/seckill/mq/exchange
            • 2.查看控制台输出,两个队列同时接受到了消息
          • 2.访问RabbitMQ控制台 http://ip:15672
            • 1.查看交换机是否绑定了两个队列
            • 2.再查看Queues,新增了两个队列
    • 2.Direct(路由模式)
        • 1.基本介绍
        • 2.需求分析
        • 3.具体实现
          • 1.配置类 RabbitMQConfig.java
          • 2.编写生产者,发送消息到交换机并指定路由 MQSender.java
          • 3.编写消费者,接受消息 MQReceiver.java
          • 4.控制层调用方法,发送信息到交换机
        • 4.启动测试
          • 1.访问查看IDEA控制台输出
            • 1.访问 http://localhost:9092/seckill/mq/direct/green
            • 2.访问 http://localhost:9092/seckill/mq/direct/red
          • 2.访问RabbitMQ控制台 http://140.143.164.206:15672
            • 1.交换机绑定了两个队列
            • 2.再查看Queues,新增了两个队列
    • 3.Topic(主题模式)
        • 1.基本介绍
          • 1.介绍
          • 2.关于匹配模式的说明
        • 2.需求分析
        • 3.具体实现
          • 1.配置类 RabbitMQConfig.java
          • 2.编写生产者,发送消息到交换机并指定路由 MQSender.java
          • 3.编写消费者,接受消息 MQReceiver.java
          • 4.控制层调用方法,发送信息到交换机
        • 4.启动测试
          • 1.示意图
          • 2.访问查看IDEA控制台输出
            • 1.访问 http://localhost:9092/seckill/mq/topic/one.orange.one 匹配Q1
            • 2.访问 http://localhost:9092/seckill/mq/topic/one.one.rabbit 匹配Q2
            • 3.访问 http://localhost:9092/seckill/mq/topic/lazy.orange.one 匹配Q1和Q2
            • 4.访问 http://localhost:9092/seckill/mq/topic/lazy.any.any.any.any 匹配Q2
    • 4.Headers(头路由模式,使用较少)
        • 1.基本介绍
        • 2.示意图
        • 3.需求分析
        • 4.具体实现
          • 1.配置类 RabbitMQConfig.java
          • 2.编写生产者,发送消息到交换机并指定路由 MQSender.java
          • 3.编写消费者,接受消息 MQReceiver.java
          • 4.控制层调用方法,发送信息到交换机
        • 5.启动测试
          • 1.访问查看IDEA控制台输出
            • 1.访问 http://localhost:9092/seckill/mq/headers 匹配队列一
            • 2.访问 http://localhost:9092/seckill/mq/headers2 匹配队列二
    • 5.RabbitMQ使用模式总结
        • 1.整体架构图
        • 2.通用使用方式
          • 1.编写RabbitMQ的配置类
          • 2.编写消息发送者
          • 3.编写消息接受者
          • 4.编写控制层

1.Fanout(广播模式)

1.基本介绍

image-20240511143401624

2.需求分析

image-20240511143533335

3.具体实现
1.编写配置类 RabbitMQConfig.java
    // 定义一个交换机,两个队列的名称private static final String EXCHANGE = "exchange";private static final String QUEUE1 = "queue1";private static final String QUEUE2 = "queue2";// 创建两个队列和一个交换机// 创建队列1@Beanpublic Queue queue1() {return new Queue(QUEUE1, true);}// 创建队列2@Beanpublic Queue queue2() {return new Queue(QUEUE2, true);}// 创建交换机@Beanpublic FanoutExchange exchange() {return new FanoutExchange(EXCHANGE);}// 将队列一和交换机绑定@Beanpublic Binding binding1() {return BindingBuilder.bind(queue1()).to(exchange());}// 将队列二和交换机绑定@Beanpublic Binding binding2() {return BindingBuilder.bind(queue2()).to(exchange());}
2.编写生产者,发送消息到交换机 MQSender.java
    // 发送消息到交换机public void sendExchange(Object message) {log.info("发送消息到交换机: " + message);// 发送消息到交换机,需要指定在配置类中配置的交换机名,这里的空字符串表示忽略路由键rabbitTemplate.convertAndSend("exchange", "", message);}
3.编写消费者,接受消息 MQReceiver.java
    // 两个队列从交换机接受消息@RabbitListener(queues = "queue1")public void receive1(Object message) {log.info("queue1接收消息: " + message);}// 两个队列从交换机接受消息@RabbitListener(queues = "queue2")public void receive2(Object message) {log.info("queue2接收消息: " + message);}
4.控制层调用方法,发送信息到交换机
    // 发送信息到交换机@RequestMapping("/mq/exchange")@ResponseBodypublic void mqExchange() {mqSender.sendExchange("hello rabbitmq exchange");}
4.启动测试
1.访问查看IDEA控制台输出
1.访问 http://localhost:9092/seckill/mq/exchange

image-20240511145506791

2.查看控制台输出,两个队列同时接受到了消息

image-20240511145523594

2.访问RabbitMQ控制台 http://ip:15672
1.查看交换机是否绑定了两个队列

image-20240511145927045

image-20240511145938023

2.再查看Queues,新增了两个队列

image-20240511145956152

2.Direct(路由模式)

1.基本介绍

image-20240511150759660

2.需求分析

image-20240511151501711

3.具体实现
1.配置类 RabbitMQConfig.java
    // ----------------- Direct模式 -----------------// 定义一个交换机,两个队列的名称private static final String DIRECT_EXCHANGE = "directExchange";private static final String DIRECT_QUEUE1 = "directQueue1";private static final String DIRECT_QUEUE2 = "directQueue2";// 定义两个路由分别为red和greenpublic static final String RED = "red";public static final String GREEN = "green";// 创建两个队列和一个交换机// 创建队列1@Beanpublic Queue directQueue1() {return new Queue(DIRECT_QUEUE1, true);}// 创建队列2@Beanpublic Queue directQueue2() {return new Queue(DIRECT_QUEUE2, true);}// 创建Direct交换机@Beanpublic DirectExchange directExchange() {return new DirectExchange(DIRECT_EXCHANGE);}// 将队列一和交换机绑定,并指定路由为red@Beanpublic Binding directBinding1() {return BindingBuilder.bind(directQueue1()).to(directExchange()).with(RED);}// 将队列二和交换机绑定,并指定路由为green@Beanpublic Binding directBinding2() {return BindingBuilder.bind(directQueue2()).to(directExchange()).with(GREEN);}// ----------------- Direct模式 -----------------
2.编写生产者,发送消息到交换机并指定路由 MQSender.java
    // ----------------- Direct模式 -----------------// 发送消息到Direct交换机,指定路由键public void sendDirect(Object message, String routingKey) {log.info("发送消息到Direct交换机: " + message);// 发送消息到交换机,需要指定在配置类中配置的交换机名,这里的路由键为 routingKeyrabbitTemplate.convertAndSend("directExchange", routingKey, message);}// ----------------- Direct模式 -----------------
3.编写消费者,接受消息 MQReceiver.java
    // ----------------- Direct模式 -----------------// directQueue1接收消息@RabbitListener(queues = "directQueue1")public void receiveDirect(Object message) {log.info("directQueue1接收消息: " + message);}// directQueue2接收消息@RabbitListener(queues = "directQueue2")public void receiveDirect2(Object message) {log.info("directQueue2接收消息: " + message);}// ----------------- Direct模式 -----------------
4.控制层调用方法,发送信息到交换机
    // ----------------- Direct模式 -----------------// 发送消息到Direct交换机,指定路由键@RequestMapping("/mq/direct/{routingKey}")@ResponseBodypublic void mqDirect(@PathVariable String routingKey) {mqSender.sendDirect("hello rabbitmq direct", routingKey);}// ----------------- Direct模式 -----------------
4.启动测试
1.访问查看IDEA控制台输出
1.访问 http://localhost:9092/seckill/mq/direct/green

image-20240511155350571

2.访问 http://localhost:9092/seckill/mq/direct/red

image-20240511155417490

2.访问RabbitMQ控制台 http://140.143.164.206:15672
1.交换机绑定了两个队列

image-20240511155827225

image-20240511155911603

2.再查看Queues,新增了两个队列

image-20240511155943495

3.Topic(主题模式)

1.基本介绍
1.介绍

image-20240511161221729

2.关于匹配模式的说明
  • 星号:可以匹配一个单词
  • 井号:可以匹配零个或多个单词
2.需求分析

image-20240511161528268

3.具体实现
1.配置类 RabbitMQConfig.java
    // ----------------- Topic模式 -----------------// 定义一个交换机,两个队列的名称private static final String TOPIC_EXCHANGE = "topicExchange";private static final String TOPIC_QUEUE1 = "topicQueue1";private static final String TOPIC_QUEUE2 = "topicQueue2";// 定义三个路由public static final String ROUTING_KEY1 = "*.orange.*";public static final String ROUTING_KEY2 = "*.*.rabbit";public static final String ROUTING_KEY3 = "lazy.#";// 创建两个队列和一个交换机// 创建队列1@Beanpublic Queue topicQueue1() {return new Queue(TOPIC_QUEUE1, true);}// 创建队列2@Beanpublic Queue topicQueue2() {return new Queue(TOPIC_QUEUE2, true);}// 创建Topic交换机@Beanpublic TopicExchange topicExchange() {return new TopicExchange(TOPIC_EXCHANGE);}// 将队列一和交换机绑定,并指定路由为*.orange.*@Beanpublic Binding topicBinding1() {return BindingBuilder.bind(topicQueue1()).to(topicExchange()).with(ROUTING_KEY1);}// 将队列二和交换机绑定,并指定路由为*.*.rabbit和lazy.#@Beanpublic Binding topicBinding2() {return BindingBuilder.bind(topicQueue2()).to(topicExchange()).with(ROUTING_KEY2);}@Beanpublic Binding topicBinding3() {return BindingBuilder.bind(topicQueue2()).to(topicExchange()).with(ROUTING_KEY3);}// ----------------- Topic模式 -----------------
2.编写生产者,发送消息到交换机并指定路由 MQSender.java
    // ----------------- Topic模式 -----------------// 发送消息到Topic交换机,指定路由键public void sendTopic(Object message, String routingKey) {log.info("发送消息到Topic交换机: " + message);// 发送消息到交换机,需要指定在配置类中配置的交换机名,这里的路由键为 routingKeyrabbitTemplate.convertAndSend("topicExchange", routingKey, message);}// ----------------- Topic模式 -----------------
3.编写消费者,接受消息 MQReceiver.java
    // ----------------- Topic模式 -----------------// topicQueue1接收消息@RabbitListener(queues = "topicQueue1")public void receiveTopic1(Object message) {log.info("topicQueue1接收消息: " + message);}// topicQueue2接收消息@RabbitListener(queues = "topicQueue2")public void receiveTopic2(Object message) {log.info("topicQueue2接收消息: " + message);}// ----------------- Topic模式 -----------------
4.控制层调用方法,发送信息到交换机
    // ----------------- Topic模式 -----------------// 发送消息到Topic交换机,指定路由键@RequestMapping("/mq/topic/{routingKey}")@ResponseBodypublic void mqTopic(@PathVariable String routingKey) {mqSender.sendTopic("hello rabbitmq topic", routingKey);}// ----------------- Topic模式 -----------------
4.启动测试
1.示意图

image-20240511161528268

2.访问查看IDEA控制台输出
1.访问 http://localhost:9092/seckill/mq/topic/one.orange.one 匹配Q1

image-20240511163348473

2.访问 http://localhost:9092/seckill/mq/topic/one.one.rabbit 匹配Q2

image-20240511163438210

3.访问 http://localhost:9092/seckill/mq/topic/lazy.orange.one 匹配Q1和Q2

image-20240511163527113

4.访问 http://localhost:9092/seckill/mq/topic/lazy.any.any.any.any 匹配Q2

image-20240511163618877

4.Headers(头路由模式,使用较少)

1.基本介绍

image-20240511164450490

2.示意图

image-20240511165737435

3.需求分析

image-20240511170148293

4.具体实现
1.配置类 RabbitMQConfig.java
    // ----------------- Headers模式 -----------------// 定义一个交换机,两个队列的名称private static final String HEADERS_EXCHANGE = "headersExchange";private static final String HEADERS_QUEUE1 = "headersQueue1";private static final String HEADERS_QUEUE2 = "headersQueue2";// 创建两个队列和一个交换机// 创建队列1@Beanpublic Queue headersQueue1() {return new Queue(HEADERS_QUEUE1, true);}// 创建队列2@Beanpublic Queue headersQueue2() {return new Queue(HEADERS_QUEUE2, true);}// 创建Headers交换机@Beanpublic HeadersExchange headersExchange() {return new HeadersExchange(HEADERS_EXCHANGE);}// 将队列一和交换机绑定,并指定key-value,使用any表示只要有一个匹配就可以@Beanpublic Binding headersBinding1() {Map<String, Object> map = new HashMap<>();map.put("key1", "value1");map.put("key2", "value2");return BindingBuilder.bind(headersQueue1()).to(headersExchange()).whereAny(map).match();}// 将队列二和交换机绑定,并指定key-value,使用all表示所有的key-value都要匹配@Beanpublic Binding headersBinding2() {Map<String, Object> map = new HashMap<>();map.put("key3", "value3");map.put("key4", "value4");return BindingBuilder.bind(headersQueue2()).to(headersExchange()).whereAll(map).match();}// ----------------- Headers模式 -----------------
2.编写生产者,发送消息到交换机并指定路由 MQSender.java
    // ----------------- Headers模式 -----------------// 发送消息到Headers交换机,匹配队列一public void sendHeaders(Object message) {log.info("发送消息到Headers交换机: " + message);// 发送消息到交换机,需要指定在配置类中配置的交换机名,这里的空字符串表示忽略路由键rabbitTemplate.convertAndSend("headersExchange", "", message, message1 -> {message1.getMessageProperties().getHeaders().put("key1", "value1");return message1;});}// 发送消息到Headers交换机,匹配队列二public void sendHeaders2(Object message) {log.info("发送消息到Headers交换机: " + message);// 发送消息到交换机,需要指定在配置类中配置的交换机名,这里的空字符串表示忽略路由键rabbitTemplate.convertAndSend("headersExchange", "", message, message1 -> {message1.getMessageProperties().getHeaders().put("key3", "value3");message1.getMessageProperties().getHeaders().put("key4", "value4");return message1;});}// ----------------- Headers模式 -----------------
3.编写消费者,接受消息 MQReceiver.java
    // ----------------- Headers模式 -----------------// headersQueue1接收消息@RabbitListener(queues = "headersQueue1")public void receiveHeaders1(Object message) {log.info("headersQueue1接收消息: " + message);}// headersQueue2接收消息@RabbitListener(queues = "headersQueue2")public void receiveHeaders2(Object message) {log.info("headersQueue2接收消息: " + message);}// ----------------- Headers模式 -----------------
4.控制层调用方法,发送信息到交换机
    // ----------------- Headers模式 -----------------// 发送消息到Headers交换机,匹配队列一@RequestMapping("/mq/headers")@ResponseBodypublic void mqHeaders() {mqSender.sendHeaders("hello rabbitmq headers");}// 发送消息到Headers交换机,匹配队列二@RequestMapping("/mq/headers2")@ResponseBodypublic void mqHeaders2() {mqSender.sendHeaders2("hello rabbitmq headers2");}// ----------------- Headers模式 -----------------
5.启动测试
1.访问查看IDEA控制台输出
1.访问 http://localhost:9092/seckill/mq/headers 匹配队列一

image-20240511173539342

2.访问 http://localhost:9092/seckill/mq/headers2 匹配队列二

image-20240511173600832

5.RabbitMQ使用模式总结

1.整体架构图

image-20240511173928100

2.通用使用方式
1.编写RabbitMQ的配置类
  • 创建交换机和队列
  • 将队列分别与交换机按照具体标识绑定
2.编写消息发送者
  • 指定交换机
  • 携带消息和具体队列标识
3.编写消息接受者
  • 只需要监听队列,接收消息即可
4.编写控制层
  • 调用消息发送者,向交换机发送请求
http://www.yayakq.cn/news/692863/

相关文章:

  • 谷歌网站建设网站方案怎么写
  • 快速做网站公司哪家专业长沙企业100强名单
  • 福建建设中心网站山西建站管理系统开发
  • 服务器网站后台登陆密码黄框显示杭州电子商务网站建设公司
  • jsp网站开发总结做a视频网站
  • 济源网站建设网站建设设计报告
  • 百度网站邀您点评绍兴seo外包公司
  • 好乐买网站推广方式腾讯云快速搭建网站
  • 网站建设佰金手指科杰十七网站建设办什么手续
  • 中国建设工程质量安全管理协会网站js代码放wordpress哪里
  • 做ae好的网站有哪些国外的网站可以做百度推广吗
  • 自己做旅游攻略的网站找装修公司去哪个网站
  • 网站前台怎么做做网站标志有限颜色使用的吗
  • 商业网站的创建程序济南 网站建设公司 医疗
  • 清远市建设局官方网站wordpress头部优化
  • 冠县哪做网站广州南建站时间
  • 怀化网站优化多少钱wordpress 插件安装失败
  • 网站开发 手机 验证码湖北省住房部城乡建设厅网站首页
  • 搜索引擎优化服务公司哪家好兰州网络优化
  • 织梦如何一个后台做两个网站欧美网站源码
  • 找人做网站去哪里找物联网平台有哪些
  • 福州网站建设福州深圳住房保障和建设局官网
  • 哪些因素营销网站权重wordpress 自动退出
  • 网站建设和续费深圳上市公司100强
  • 设计互动网站建设做网站流量点击分析的软件
  • 天猫淘宝优惠券网站怎么做动态发布网站和静态发布网站
  • 广州做外贸网站公司wordpress发布文章 发布
  • 建站申请东莞php网站开发
  • 网站建设费 会计分录wordpress有用户主页吗
  • 网站一定要备案苏州最新情况最新消息今天