|
@@ -0,0 +1,285 @@
|
|
|
|
+package com.usky.dxtop.service.config;
|
|
|
|
+
|
|
|
|
+import lombok.Data;
|
|
|
|
+import org.springframework.amqp.core.*;
|
|
|
|
+import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
|
|
|
|
+import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
|
|
|
|
+import org.springframework.amqp.rabbit.connection.ConnectionFactory;
|
|
|
|
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
|
|
|
|
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
|
|
|
+import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
|
+import org.springframework.boot.autoconfigure.amqp.RabbitProperties;
|
|
|
|
+import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
|
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
|
+import org.springframework.context.annotation.Configuration;
|
|
|
|
+import org.springframework.context.annotation.Primary;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @author yq
|
|
|
|
+ * @date 2021/9/9 13:37
|
|
|
|
+ */
|
|
|
|
+@Data
|
|
|
|
+@Configuration
|
|
|
|
+public class RabbitmqConfig {
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public static final String PERSON = "profile_trans_produce";
|
|
|
|
+ public static final String CARD = "card_trans_produce";
|
|
|
|
+ public static final String CHARGE = "charge_trans_produce";
|
|
|
|
+ public static final String DISH = "dish_trade_produce";
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private RabbitProperties rabbitProperties;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 连接工厂
|
|
|
|
+ * @param vHost
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public ConnectionFactory connectionFactory(String vHost) {
|
|
|
|
+ CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
|
|
|
|
+ connectionFactory.setHost(rabbitProperties.getHost());
|
|
|
|
+ connectionFactory.setPort(rabbitProperties.getPort());
|
|
|
|
+ connectionFactory.setUsername(rabbitProperties.getUsername());
|
|
|
|
+ connectionFactory.setPassword(rabbitProperties.getPassword());
|
|
|
|
+ connectionFactory.setVirtualHost(vHost);
|
|
|
|
+ return connectionFactory;
|
|
|
|
+ }
|
|
|
|
+ /**
|
|
|
|
+ * 发送消息模版
|
|
|
|
+ * @param connectionFactory
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
|
|
|
|
+ RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
|
|
|
|
+ rabbitTemplate.setMessageConverter(this.messageConverter());
|
|
|
|
+ return rabbitTemplate;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 监听工厂
|
|
|
|
+ * @param configurer
|
|
|
|
+ * @param connectionFactory
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public SimpleRabbitListenerContainerFactory listenerFactory(
|
|
|
|
+ SimpleRabbitListenerContainerFactoryConfigurer configurer,
|
|
|
|
+ ConnectionFactory connectionFactory) {
|
|
|
|
+ SimpleRabbitListenerContainerFactory listenerContainerFactory = new SimpleRabbitListenerContainerFactory();
|
|
|
|
+ //设置手动ack
|
|
|
|
+ listenerContainerFactory.setAcknowledgeMode(AcknowledgeMode.AUTO);
|
|
|
|
+ configurer.configure(listenerContainerFactory, connectionFactory);
|
|
|
|
+ return listenerContainerFactory;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 序列化
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public Jackson2JsonMessageConverter messageConverter() {
|
|
|
|
+ return new Jackson2JsonMessageConverter();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 交换机
|
|
|
|
+ * @param name
|
|
|
|
+ * @param amqpAdmin
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public DirectExchange exchange(String name, AmqpAdmin amqpAdmin){
|
|
|
|
+ DirectExchange exchange = new DirectExchange(name, true, false);
|
|
|
|
+ exchange.setAdminsThatShouldDeclare(amqpAdmin);
|
|
|
|
+ return exchange;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 队列
|
|
|
|
+ * @param name
|
|
|
|
+ * @param amqpAdmin
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public Queue queue(String name, AmqpAdmin amqpAdmin){
|
|
|
|
+ Queue queue = new Queue(name, true);
|
|
|
|
+ queue.setAdminsThatShouldDeclare(amqpAdmin);
|
|
|
|
+ return queue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 连接配置
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Bean(name = "personConnectionFactory")
|
|
|
|
+ @Primary
|
|
|
|
+ public ConnectionFactory personConnectionFactory(){
|
|
|
|
+ return this.connectionFactory(PERSON);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean(name = "cartConnectionFactory")
|
|
|
|
+ public ConnectionFactory cartConnectionFactory(){
|
|
|
|
+ return this.connectionFactory(CARD);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean(name = "chargeConnectionFactory")
|
|
|
|
+ public ConnectionFactory chargeConnectionFactory(){
|
|
|
|
+ return this.connectionFactory(CHARGE);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean(name = "dishConnectionFactory")
|
|
|
|
+ public ConnectionFactory dishConnectionFactory(){
|
|
|
|
+ return this.connectionFactory(DISH);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 发送模版配置
|
|
|
|
+ */
|
|
|
|
+ @Bean(name = "personRabbitTemplate")
|
|
|
|
+ @Primary
|
|
|
|
+ public RabbitTemplate personRabbitTemplate(@Qualifier("personConnectionFactory") ConnectionFactory connectionFactory ) {
|
|
|
|
+ return this.rabbitTemplate(connectionFactory);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean(name = "cartRabbitTemplate")
|
|
|
|
+ public RabbitTemplate cartRabbitTemplate(@Qualifier("cartConnectionFactory") ConnectionFactory connectionFactory ) {
|
|
|
|
+ return this.rabbitTemplate(connectionFactory);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean(name = "chargeRabbitTemplate")
|
|
|
|
+ public RabbitTemplate chargeRabbitTemplate(@Qualifier("chargeConnectionFactory") ConnectionFactory connectionFactory ) {
|
|
|
|
+ return this.rabbitTemplate(connectionFactory);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean(name = "dishRabbitTemplate")
|
|
|
|
+ public RabbitTemplate dishRabbitTemplate(@Qualifier("dishConnectionFactory") ConnectionFactory connectionFactory ) {
|
|
|
|
+ return this.rabbitTemplate(connectionFactory);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 监听工厂配置
|
|
|
|
+ */
|
|
|
|
+ @Bean(name = "personListenerFactory")
|
|
|
|
+ @Primary
|
|
|
|
+ public SimpleRabbitListenerContainerFactory personListenerFactory(
|
|
|
|
+ SimpleRabbitListenerContainerFactoryConfigurer configurer,
|
|
|
|
+ @Qualifier("personConnectionFactory") ConnectionFactory connectionFactory) {
|
|
|
|
+ return this.listenerFactory(configurer,connectionFactory);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean(name = "cartListenerFactory")
|
|
|
|
+ public SimpleRabbitListenerContainerFactory cartListenerFactory(
|
|
|
|
+ SimpleRabbitListenerContainerFactoryConfigurer configurer,
|
|
|
|
+ @Qualifier("cartConnectionFactory") ConnectionFactory connectionFactory) {
|
|
|
|
+ return this.listenerFactory(configurer,connectionFactory);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean(name = "chargeListenerFactory")
|
|
|
|
+ public SimpleRabbitListenerContainerFactory chargeListenerFactory(
|
|
|
|
+ SimpleRabbitListenerContainerFactoryConfigurer configurer,
|
|
|
|
+ @Qualifier("chargeConnectionFactory") ConnectionFactory connectionFactory) {
|
|
|
|
+ return this.listenerFactory(configurer,connectionFactory);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean(name = "dishListenerFactory")
|
|
|
|
+ public SimpleRabbitListenerContainerFactory dishListenerFactory(
|
|
|
|
+ SimpleRabbitListenerContainerFactoryConfigurer configurer,
|
|
|
|
+ @Qualifier("dishConnectionFactory") ConnectionFactory connectionFactory) {
|
|
|
|
+ return this.listenerFactory(configurer,connectionFactory);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * admin配置
|
|
|
|
+ */
|
|
|
|
+ @Bean("personAdmin")
|
|
|
|
+ @Primary
|
|
|
|
+ AmqpAdmin personAmqpAdmin(@Qualifier("personConnectionFactory") ConnectionFactory connectionFactory) {
|
|
|
|
+ return new RabbitAdmin(connectionFactory);
|
|
|
|
+ }
|
|
|
|
+ @Bean("cartAdmin")
|
|
|
|
+ AmqpAdmin cartAmqpAdmin(@Qualifier("cartConnectionFactory") ConnectionFactory connectionFactory) {
|
|
|
|
+ return new RabbitAdmin(connectionFactory);
|
|
|
|
+ }
|
|
|
|
+ @Bean("chargeAdmin")
|
|
|
|
+ AmqpAdmin chargeAmqpAdmin(@Qualifier("chargeConnectionFactory") ConnectionFactory connectionFactory) {
|
|
|
|
+ return new RabbitAdmin(connectionFactory);
|
|
|
|
+ }
|
|
|
|
+ @Bean("dishAdmin")
|
|
|
|
+ AmqpAdmin dishAmqpAdmin(@Qualifier("dishConnectionFactory") ConnectionFactory connectionFactory) {
|
|
|
|
+ return new RabbitAdmin(connectionFactory);
|
|
|
|
+ }
|
|
|
|
+ /**
|
|
|
|
+ * 交换机
|
|
|
|
+ */
|
|
|
|
+ @Bean("personExchange")
|
|
|
|
+ @Primary
|
|
|
|
+ public DirectExchange personExchange(@Qualifier("personAdmin") AmqpAdmin amqpAdmin) {
|
|
|
|
+ return this.exchange(PERSON,amqpAdmin);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean("cartExchange")
|
|
|
|
+ public DirectExchange cartExchange(@Qualifier("cartAdmin") AmqpAdmin amqpAdmin) {
|
|
|
|
+ return this.exchange(CARD,amqpAdmin);
|
|
|
|
+ }
|
|
|
|
+ @Bean("chargeExchange")
|
|
|
|
+ public DirectExchange chargeExchange(@Qualifier("chargeAdmin") AmqpAdmin amqpAdmin) {
|
|
|
|
+ return this.exchange(CHARGE,amqpAdmin);
|
|
|
|
+ }
|
|
|
|
+ @Bean("dishExchange")
|
|
|
|
+ public DirectExchange dishExchange(@Qualifier("dishAdmin") AmqpAdmin amqpAdmin) {
|
|
|
|
+ return this.exchange(DISH,amqpAdmin);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 队列
|
|
|
|
+ */
|
|
|
|
+ @Bean("personQueue")
|
|
|
|
+ @Primary
|
|
|
|
+ Queue personQueue(@Qualifier("personAdmin")AmqpAdmin amqpAdmin) {
|
|
|
|
+ return this.queue(PERSON,amqpAdmin);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean("cartQueue")
|
|
|
|
+ Queue cartQueue(@Qualifier("cartAdmin")AmqpAdmin amqpAdmin) {
|
|
|
|
+ return this.queue(CARD,amqpAdmin);
|
|
|
|
+ }
|
|
|
|
+ @Bean("chargeQueue")
|
|
|
|
+ Queue chargeQueue(@Qualifier("chargeAdmin")AmqpAdmin amqpAdmin) {
|
|
|
|
+ return this.queue(CHARGE,amqpAdmin);
|
|
|
|
+ }
|
|
|
|
+ @Bean("dishQueue")
|
|
|
|
+ Queue dishQueue(@Qualifier("dishAdmin")AmqpAdmin amqpAdmin) {
|
|
|
|
+ return this.queue(DISH,amqpAdmin);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 绑定
|
|
|
|
+ */
|
|
|
|
+ @Bean("personBin")
|
|
|
|
+ @Primary
|
|
|
|
+ Binding personBindingPersonDirect(@Qualifier("personAdmin")AmqpAdmin amqpAdmin) {
|
|
|
|
+ Binding binding = BindingBuilder.bind(personQueue(amqpAdmin)).to(personExchange(amqpAdmin)).with(PERSON);
|
|
|
|
+ binding.setAdminsThatShouldDeclare(amqpAdmin);
|
|
|
|
+ return binding;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Bean("cartBin")
|
|
|
|
+ Binding cartBindingPersonDirect(@Qualifier("cartAdmin")AmqpAdmin amqpAdmin) {
|
|
|
|
+ Binding binding = BindingBuilder.bind(cartQueue(amqpAdmin)).to(cartExchange(amqpAdmin)).with(CARD);
|
|
|
|
+ binding.setAdminsThatShouldDeclare(amqpAdmin);
|
|
|
|
+ return binding;
|
|
|
|
+ }
|
|
|
|
+ @Bean("chargeBin")
|
|
|
|
+ Binding chargeBindingPersonDirect(@Qualifier("chargeAdmin")AmqpAdmin amqpAdmin) {
|
|
|
|
+ Binding binding = BindingBuilder.bind(chargeQueue(amqpAdmin)).to(chargeExchange(amqpAdmin)).with(CHARGE);
|
|
|
|
+ binding.setAdminsThatShouldDeclare(amqpAdmin);
|
|
|
|
+ return binding;
|
|
|
|
+ }
|
|
|
|
+ @Bean("dishBin")
|
|
|
|
+ Binding dishBindingPersonDirect(@Qualifier("dishAdmin")AmqpAdmin amqpAdmin) {
|
|
|
|
+ Binding binding = BindingBuilder.bind(dishQueue(amqpAdmin)).to(dishExchange(amqpAdmin)).with(DISH);
|
|
|
|
+ binding.setAdminsThatShouldDeclare(amqpAdmin);
|
|
|
|
+ return binding;
|
|
|
|
+ }
|
|
|
|
+}
|