做网站的公司,新手学做网站vs,微信小程序企业网站,网站建设的展望 视频目录
一、简介
二、代码展示
父pom文件
pom文件
配置文件
config
生产者
消费者
测试
结果 一、简介
主题交换机#xff0c;这个交换机其实跟直连交换机流程差不多#xff0c;但是它的特点就是在它的路由键和绑定键之间是有规则的。
简单地介绍下规则#xff1…
目录
一、简介
二、代码展示
父pom文件
pom文件
配置文件
config
生产者
消费者
测试
结果 一、简介
主题交换机这个交换机其实跟直连交换机流程差不多但是它的特点就是在它的路由键和绑定键之间是有规则的。
简单地介绍下规则
* (星号) 用来表示一个单词 (必须出现的)代表两点之间一个占位单词/
# (井号) 用来表示任意数量零个或多个单词代表后面所有匹配所有 举个小例子
队列Q1 绑定键为 *.TT.*
队列Q2绑定键为 TT.#
如果一条消息携带的路由键为 A.TT.B那么队列Q1将会收到
如果一条消息携带的路由键为TT.AA.BB那么队列Q2将会收到
当一个队列的绑定键为 #井号 的时候这个队列将会无视消息的路由键接收所有的消息。
当 * (星号) 和 # (井号) 这两个特殊字符都未在绑定键中出现的时候此时主题交换机就拥有的直连交换机的行为。
如果只有 # 它就实现了扇形交换机的功能。
所以主题交换机也就实现了扇形交换机的功能和直连交换机的功能
二、代码展示 父pom文件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.1/version
!-- version2.2.5.RELEASE/version--relativePath/ !-- lookup parent from repository --/parentgroupIdcom.chensir/groupIdartifactIdspring-boot-rabbitmq/artifactIdversion0.0.1-SNAPSHOT/versionnamespring-boot-rabbitmq/namepropertiesjava.version8/java.versionhutool.version5.8.3/hutool.versionlombok.version1.18.24/lombok.version/propertiesdescriptionspring-boot-rabbitmq/descriptionpackagingpom/packagingmodulesmoduledirect-exchange/modulemodulefanout-exchange/modulemoduletopic-exchange/modulemodulegame-exchange/modulemoduledead-letter-queue/modulemoduledelay-queue/modulemoduledelay-queue2/module/modulesdependencyManagementdependenciesdependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion${hutool.version}/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/version/dependency/dependencies/dependencyManagement/projectpom文件
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.chensir/groupIdartifactIdspring-boot-rabbitmq/artifactIdversion0.0.1-SNAPSHOT/versionrelativePath../pom.xml /relativePath/parentartifactIdtopic-exchange/artifactIddependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.amqp/groupIdartifactIdspring-rabbit-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build/project配置文件
server.port8083
#host
spring.rabbitmq.host121.40.100.66
#默认5672
spring.rabbitmq.port5672
#用户名
spring.rabbitmq.usernameguest
#密码
spring.rabbitmq.passwordguest
#连接到代理时用的虚拟主机
spring.rabbitmq.virtual-host/
#每个消费者每次可最大处理的nack消息数量
spring.rabbitmq.listener.simple.prefetch1
#表示消息确认方式其有三种配置方式分别是none、manual(手动)和auto(自动)默认auto
spring.rabbitmq.listener.simple.acknowledge-modeauto
#监听重试是否可用
spring.rabbitmq.listener.simple.retry.enabledtrue
#最大重试次数
#spring.rabbitmq.listener.simple.retry.max-attempts5
#最大重试时间间隔
spring.rabbitmq.listener.simple.retry.max-interval20000ms
#第一次和第二次尝试传递消息的时间间隔
spring.rabbitmq.listener.simple.retry.initial-interval3000ms
#应用于上一重试间隔的乘数
spring.rabbitmq.listener.simple.retry.multiplier2
#决定被拒绝的消息是否重新入队默认是true与参数acknowledge-mode有关系
spring.rabbitmq.listener.simple.default-requeue-rejectedfalseconfig
package com.chensir.config;import org.springframework.amqp.core.*;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class RabbitConfig {public static final String TOPIC_DILIREBA TOPIC_迪丽热巴;public static final String TOPIC_ZHANGBOZHI TOPIC_张柏芝;public static final String TOPIC_LAMUYANGZHI TOPIC_辣目洋子;//解决对象类型乱码Beanpublic Jackson2JsonMessageConverter messageConverter(){return new Jackson2JsonMessageConverter();}Beanpublic TopicExchange topicExchange(){return new TopicExchange(TopicExchange-01,true,false);}Beanpublic Queue topic_dilireba(){return QueueBuilder.durable(TOPIC_DILIREBA).build();}Beanpublic Queue topic_zhangbozhi(){return QueueBuilder.durable(TOPIC_ZHANGBOZHI).build();}Beanpublic Queue topic_lamuyangzhi(){return QueueBuilder.durable(TOPIC_LAMUYANGZHI).build();}//“#” 匹配一个或多个词//“*” 匹配一个词//“.” 表示分隔一个词。//“log.#” 能够匹配到 log.info.blog 和log.err//“log.*” 能够匹配到 log.err 但是不能匹配到 log.info.blogBeanpublic Binding binding(){return BindingBuilder.bind(topic_dilireba()).to(topicExchange()).with(1.9.#);}Beanpublic Binding binding2(){//1.7.0-1.7.9 代码这里修改匹配字符#和*后 还需要在rabbitMQ中把队列删除,队列不会自动修改return BindingBuilder.bind(topic_zhangbozhi()).to(topicExchange()).with(1.7.#);}Beanpublic Binding binding3(){//1.0-1.99return BindingBuilder.bind(topic_lamuyangzhi()).to(topicExchange()).with(1.#);}}生产者
package com.chensir.provider;import com.chensir.model.SunnyBoy;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;import javax.annotation.Resource;Component
public class TopicProvider {Resourceprivate RabbitTemplate rabbitTemplate;public void send(){// * 代表两点之间一个占位单词// # 代表后面所有匹配所有SunnyBoy boy new SunnyBoy();boy.setName(陈冠希);boy.setBrief(1.7.2.2);rabbitTemplate.convertAndSend(TopicExchange-01,boy.getBrief(),boy);}}
消费者
package com.chensir.consumer;import cn.hutool.json.JSONUtil;
import com.chensir.config.RabbitConfig;
import com.chensir.model.SunnyBoy;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;Component
public class TopicConsumer {RabbitHandlerRabbitListener(queues RabbitConfig.TOPIC_DILIREBA )public void process(SunnyBoy boy) {System.out.println(迪丽热巴收到消息 JSONUtil.toJsonStr(boy));}RabbitHandlerRabbitListener(queues RabbitConfig.TOPIC_ZHANGBOZHI )public void process2(SunnyBoy boy) {System.out.println(张柏芝收到消息 JSONUtil.toJsonStr(boy));String name boy.getName();System.out.println(name);System.out.println(boy);}RabbitHandlerRabbitListener(queues RabbitConfig.TOPIC_LAMUYANGZHI )public void process3(SunnyBoy boy) {System.out.println(辣目洋子收到消息 JSONUtil.toJsonStr(boy));}
}
测试 结果