主题交换机简单实现

embedded/2024/12/27 8:00:57/

运行代码

java">package com.by.consumer;import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author lenovo* @version 0.1* @className TopicConsumer   主题交换机* @date 2024/12/24 20:15* @since jdk11*/
@Configuration
@Slf4j
public class TopicConsumer {@Bean   // 创建消息队列public Queue topicQuery1() {return QueueBuilder.durable("Topic-牛牛").build();}@Bean   // 创建消息队列public Queue topicQuery2() {return QueueBuilder.durable("Topic-花花").build();}@Bean   // 创建消息队列public Queue topicQuery3() {return QueueBuilder.durable("Topic-峰峰").build();}@Bean   //创建主题交换机           //durable 属性决定了队列是否在 RabbitMQ 服务器重启后仍然存在public Exchange topicExchange() {return ExchangeBuilder.topicExchange("Topic").durable(true).build();}@Bean   //绑定队列到交换机public Binding Tbinding1() {return BindingBuilder.bind(topicQuery1()).to(topicExchange()).with("1.6.*").noargs();}@Bean   //绑定队列到交换机public Binding Tbinding2() {return BindingBuilder.bind(topicQuery2()).to(topicExchange()).with("#").noargs();}@Bean   //绑定队列到交换机public Binding Tbinding3() {return BindingBuilder.bind(topicQuery3()).to(topicExchange()).with("1.8.*").noargs();}@RabbitListener(queues = "Topic-牛牛")   //消费者消费消息队列的信息,就不会在队列中显示public void Tconsumer1(String msg) {log.info("Topic-牛牛 收到消息:{}",msg);}@RabbitListener(queues = "Topic-花花")   //消费者消费消息队列的信息,就不会在队列中显示public void Tconsumer2(String msg) {log.info("Topic-花花 收到消息:{}",msg);}@RabbitListener(queues = "Topic-峰峰")   //消费者消费消息队列的信息,就不会在队列中显示public void Tconsumer3(String msg) {log.info("Topic-峰峰 收到消息:{}",msg);}
}
java">package com.by.provider;import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author lenovo* @version 0.1* @className FanoutProvider* @date 2024/12/24 20:01* @since jdk11*/
@Service
@Slf4j
public class TopicProvider {@AutowiredRabbitTemplate rabbitTemplate;public void send(String routingKey , String msg){//如果交换机的名称是错误的,在投递消息的时候,会包错 404 找不到 exchangerabbitTemplate.convertAndSend("Topic" , routingKey , msg);log.error("主题交换机发送成功——>{}" , msg);}
}

测试

java">package com.by;import com.by.provider.TopicProvider;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;@SpringBootTest
class TopicTests {@AutowiredTopicProvider topicProvider;@Testvoid test() throws IOException {topicProvider.send("1.6.5","张柏芝");System.in.read();}@Testvoid test2() throws IOException {topicProvider.send("1.8.8","赵丽娜");System.in.read();}@Testvoid test3() throws IOException {topicProvider.send("2.3.0","外星女人");System.in.read();}
}


http://www.ppmy.cn/embedded/148819.html

相关文章

深入理解.NET内存回收机制

[前言:].Net平台提供了许多新功能,这些功能能够帮助程序员生产出更高效和稳定的代码。其中之一就是垃圾回收器(GC)。这篇文章将深入探讨这一功能,了解它是如何工作的以及如何编写代码来更好地使用这一.Net平台提供的功…

数据仓库是什么?数据仓库简介

数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持企业的管理决策。以下是对数据仓库的详细解释: 一、定义与特性 定义:数据仓库是构建在组织的现有数据基础上&#x…

五十一:HPACK如何减少HTTP头部的大小?

在现代的Web通信中,HTTP是最常用的协议。然而,随着网络应用程序的复杂化,HTTP头部的大小迅速增加,尤其是在HTTP/2中,由于其多路复用特性,多个请求和响应共享同一个连接,头部大小对性能的影响变得…

Flask内存马学习

文章目录 参考文章环境搭建before_request方法构造内存马after_request方法构造内存马errorhandler方式构造内存马add_url_rule方式构造内存马 参考文章 https://www.mewo.cc/archives/10/ https://www.cnblogs.com/gxngxngxn/p/18181936 前人栽树, 后人乘凉 大佬们太nb了, …

虚幻引擎结构之ULevel

在虚幻引擎中,场景的组织和管理是通过子关卡(Sublevel)来实现的。这种设计不仅提高了资源管理的灵活性,还优化了游戏性能,特别是在处理大型复杂场景时。 1. 场景划分模式 虚幻引擎采用基于子关卡的场景划分模式。每个…

使用腾讯云CVM搭建 K8s + Docker + Harbor :部署SpringBoot应用与配置指南

在现代云原生应用的开发和部署过程中,容器化技术已经成为主流,而 Kubernetes(K8s)则是容器编排的绝对领导者。为了高效地管理和分发容器镜像,拥有一个可靠的私有镜像仓库是每个开发者和运维工程师不可或缺的工具。Dock…

RPA系列-uipath 学习笔记3

用uipath读取excel填写表单 所有素材都搬运自uipath academy 读取数据 现在手头上有这样一份数据 需要按行依次把数据填入到浏览器中的表单中,首先创建一个空的process 在activity中拉入excel process scope,同时在里面点击use_excel_file,选择你要使用的file,并…

python网络框架——Django、Tornado、Flask和Twisted

Django、Tornado和flask是全栈网络框架,而Twisted更专注于网络底层的高性能封装,不提供HTML模版引擎等界面功能,因此不能称为全栈框架。 1、Django 发布于2003年,是当前python世界里最负盛名且最成熟的网络框架。相较于其他web框…