| package com.xcong.excoin.configurations; | 
|   | 
| import com.xcong.excoin.configurations.properties.CustomRabbitProperties; | 
| import org.springframework.amqp.core.Binding; | 
| import org.springframework.amqp.core.BindingBuilder; | 
| import org.springframework.amqp.core.DirectExchange; | 
| import org.springframework.amqp.core.Queue; | 
| import org.springframework.amqp.rabbit.connection.ConnectionFactory; | 
| import org.springframework.amqp.rabbit.core.RabbitTemplate; | 
| import org.springframework.beans.factory.config.ConfigurableBeanFactory; | 
| import org.springframework.context.annotation.Bean; | 
| import org.springframework.context.annotation.Configuration; | 
| import org.springframework.context.annotation.Scope; | 
|   | 
| import javax.annotation.Resource; | 
|   | 
| /** | 
|  * @author wzy | 
|  * @date 2020-05-25 | 
|  **/ | 
| @Configuration | 
| public class RabbitMqConfig { | 
|   | 
|     public static final String EXCHANGE_ONE = "biue-exchange-one"; | 
|   | 
|     public static final String QUEUE_TEST = "test-queue"; | 
|   | 
|     public static final String ROUTING_KEY_TEST = "test-routingKey"; | 
|   | 
|     public static final String EXCHANGE_A = "biue-exchange-A"; | 
|   | 
|   | 
|     public static final String EXCHANGE_USDT_UPDATE = "exchange_usdt_update"; | 
|   | 
|     public static final String QUEUE_USDT_UPDATE = "queue_usdt_update"; | 
|   | 
|     public static final String ROUTING_KEY_USDT_UPDATE = "routing_key_usdt_update"; | 
|   | 
|     public static final String EXCHANGE_USDT_ADDRESS = "exchange_usdt_address"; | 
|   | 
|     public static final String QUEUE_USDT_ADDRESS= "queue_usdt_address"; | 
|   | 
|     public static final String ROUTING_KEY_USDT_ADDRESS = "routing_key_usdt_address"; | 
|   | 
|   | 
|     /** | 
|      * 撮合交易 | 
|      */ | 
|     public static final String EXCHANGE_B = "biue-exchange-B"; | 
|   | 
|   | 
|     // 开多止盈队列 | 
|     public static final String QUEUE_MOREPRO = "QUEUE_MOREPRO_NEW"; | 
|     // 开空止盈队列 | 
|     public static final String QUEUE_LESSPRO = "QUEUE_LESSPRO_NEW"; | 
|     // 开多止损队列 | 
|     public static final String QUEUE_MORELOSS = "QUEUE_MORELOSS_NEW"; | 
|     // 开空止损队列 | 
|     public static final String QUEUE_LESSLOSS = "QUEUE_LESSLOSS_NEW"; | 
|   | 
|     // 限价委托 | 
|     public static final String QUEUE_LIMIT = "QUEUE_LIMIT_NEW"; | 
|   | 
|     // 委托平仓 | 
|     public static final String QUEUE_LIMIT_CLOSE = "QUEUE_LIMIT_CLOSE_NEW"; | 
|   | 
|     // 爆仓队列 | 
|     public static final String QUEUE_COINOUT = "QUEUE_COINOUT_NEW"; | 
|   | 
|     //价格操作 | 
|     public static final String QUEUE_PRICEOPERATE = "QUEUE_PRICEOPERATE_NEW"; | 
|   | 
|     // 平仓队列 | 
|     public static final String QUEUE_CLOSETRADE = "QUEUE_CLOSETRADE_NEW"; | 
|   | 
|     // 全仓爆仓 | 
|     public static final String QUEUE_WHOLE_BOMB = "QUEUE_WHOLE_BOMB_NEW"; | 
|   | 
|     // 全仓价格操作 | 
|     public static final String QUEUE_WHOLE_PRICE = "QUEUE_WHOLE_PRCE"; | 
|   | 
|   | 
|     // 开多止盈路由键 | 
|     public static final String ROUTINGKEY_MOREPRO = "ROUTINGKEY_MOREPRO"; | 
|     // 开空止盈路由 | 
|     public static final String ROUTINGKEY_LESSPRO = "ROUTINGKEY_LESSPRO"; | 
|     // 开多止损路由 | 
|     public static final String ROUTINGKEY_MORELOSS = "ROUTINGKEY_MORELOSS"; | 
|     // 开空止损路由 | 
|     public static final String ROUTINGKEY_LESSLOSS = "ROUTINGKEY_LESSLOSS"; | 
|     // 限价委托 | 
|     public static final String ROUTINGKEY_LIMIT = "ROUTINGKEY_LIMIT"; | 
|   | 
|     // 爆仓路由 | 
|     public static final String ROUTINGKEY_COINOUT = "ROUTINGKEY_COINOUT"; | 
|   | 
|   | 
|     // 价格操作 | 
|     public static final String ROUTINGKEY_PRICEOPERATE = "ROUTINGKEY_PRICEOPERATE"; | 
|     // 平仓路由 | 
|     public static final String ROUTINGKEY_CLOSETRADE = "ROUTINGKEY_CLOSETRADE"; | 
|   | 
|     // 委托平仓 | 
|     public static final String ROUTINGKEY_LIMIT_CLOSE = "ROUTINGKEY_LIMIT_CLOSE"; | 
|   | 
|     // 全仓爆仓 | 
|     public static final String ROUTINGKEY_WHOLE_BOMB = "ROUTINGKEY_WHOLE_BOMB"; | 
|   | 
|     // 全仓价格操作 | 
|     public static final String ROUTINGKEY_WHOLE_PRICE = "ROUTINGKEY_WHOLE_PRICE"; | 
|   | 
|     @Resource | 
|     private ConnectionFactory connectionFactory; | 
|   | 
| //    @Bean | 
| //    public ConnectionFactory connectionFactory() { | 
| //        CachingConnectionFactory connectionFactory = new CachingConnectionFactory(customRabbitProperties.getHost(), customRabbitProperties.getPort()); | 
| //        connectionFactory.setUsername(customRabbitProperties.getUsername()); | 
| //        connectionFactory.setPassword(customRabbitProperties.getPassword()); | 
| //        connectionFactory.setPublisherConfirmType(CachingConnectionFactory.ConfirmType.CORRELATED); | 
| //        return connectionFactory; | 
| //    } | 
|   | 
|     @Bean | 
|     @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) | 
|     public RabbitTemplate rabbitTemplate() { | 
|         return new RabbitTemplate(connectionFactory); | 
|     } | 
|   | 
|     @Bean | 
|     public DirectExchange defaultExchange() { | 
|         return new DirectExchange(EXCHANGE_ONE); | 
|     } | 
|   | 
|     @Bean | 
|     public Queue testQueue() { | 
|         return new Queue(QUEUE_TEST, true); | 
|     } | 
|   | 
|     @Bean | 
|     public Binding binding() { | 
|         return BindingBuilder.bind(testQueue()).to(defaultExchange()).with(ROUTING_KEY_TEST); | 
|     } | 
|   | 
|   | 
|    @Bean | 
|     public DirectExchange usdtUpdateExchange() { | 
|         return new DirectExchange(EXCHANGE_USDT_UPDATE); | 
|     } | 
|   | 
|   | 
|     @Bean | 
|     public Queue usdtUpdateQueue() { | 
|         return new Queue(QUEUE_USDT_UPDATE, true); | 
|     } | 
|   | 
|     @Bean | 
|     public Binding usdtUpdatebinding() { | 
|         return BindingBuilder.bind(usdtUpdateQueue()).to(usdtUpdateExchange()).with(ROUTING_KEY_USDT_UPDATE); | 
|     } | 
|   | 
|     @Bean | 
|     public DirectExchange usdtAddressExchange() { | 
|         return new DirectExchange(EXCHANGE_USDT_ADDRESS); | 
|     } | 
|   | 
|   | 
|     @Bean | 
|     public Queue usdtAddressQueue() { | 
|         return new Queue(QUEUE_USDT_ADDRESS, true); | 
|     } | 
|   | 
|     @Bean | 
|     public Binding usdtAddressbinding() { | 
|         return BindingBuilder.bind(usdtAddressQueue()).to(usdtAddressExchange()).with(ROUTING_KEY_USDT_ADDRESS); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 交换器A 可以继续添加交换器B C | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public DirectExchange orderExchange() { | 
|         return new DirectExchange(EXCHANGE_A); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 开多止盈队列 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Queue queueMorePro() { | 
|         // 定义一个名称为QUEUE_A,持久化的队列 | 
|         return new Queue(QUEUE_MOREPRO, true); | 
|     } | 
|   | 
|     /** | 
|      * 开空止盈队列 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Queue queueLessPro() { | 
|         // 定义一个名称为QUEUE_A,持久化的队列 | 
|         return new Queue(QUEUE_LESSPRO, true); | 
|     } | 
|   | 
|     /** | 
|      * 开多止损 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Queue queueMoreLoss() { | 
|         // 定义一个名称为QUEUE_A,持久化的队列 | 
|         return new Queue(QUEUE_MORELOSS, true); | 
|     } | 
|   | 
|     /** | 
|      * 开空止损 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Queue queueLessLoss() { | 
|         // 定义一个名称为QUEUE_A,持久化的队列 | 
|         return new Queue(QUEUE_LESSLOSS, true); | 
|     } | 
|   | 
|     /** | 
|      * 限价委托 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Queue queueLimit() { | 
|         return new Queue(QUEUE_LIMIT, true); | 
|     } | 
|   | 
|     /** | 
|      * 委托平仓 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Queue queueLimitClose() { | 
|         return new Queue(QUEUE_LIMIT_CLOSE, true); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 爆仓 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Queue queueCoinout() { | 
|         return new Queue(QUEUE_COINOUT, true); | 
|     } | 
|   | 
|     /** | 
|      * 价格操作 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Queue queuePriceoperate() { | 
|         return new Queue(QUEUE_PRICEOPERATE, true); | 
|     } | 
|   | 
|     /** | 
|      * 价格操作 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Queue queueCloseTrade() { | 
|         return new Queue(QUEUE_CLOSETRADE, true); | 
|     } | 
|   | 
|     @Bean | 
|     public Queue queueWholePrice() { | 
|         return new Queue(QUEUE_WHOLE_PRICE, true); | 
|     } | 
|     /** | 
|      * 全仓爆仓 | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Queue queueWholeBomb() { | 
|         return new Queue(QUEUE_WHOLE_BOMB, true); | 
|     } | 
|   | 
|   | 
|     @Bean | 
|     public Binding bindingWholePrice() { | 
|         return BindingBuilder.bind(queueWholePrice()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_WHOLE_PRICE); | 
|     } | 
|   | 
|     /** | 
|      * 开多止盈 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Binding bindingMroPro() { | 
|         return BindingBuilder.bind(queueMorePro()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_MOREPRO); | 
|     } | 
|   | 
|     /** | 
|      * 开空止盈 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Binding bindingLessPro() { | 
|         return BindingBuilder.bind(queueLessPro()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_LESSPRO); | 
|     } | 
|   | 
|     /** | 
|      * 开多止损 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Binding bindingMroLoss() { | 
|         return BindingBuilder.bind(queueMoreLoss()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_MORELOSS); | 
|     } | 
|   | 
|     /** | 
|      * 开空止损 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Binding bindingLessLoss() { | 
|         return BindingBuilder.bind(queueLessLoss()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_LESSLOSS); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 委托 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Binding bindingLimit() { | 
|         return BindingBuilder.bind(queueLimit()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_LIMIT); | 
|     } | 
|   | 
|     /** | 
|      * 委托平仓 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Binding bindingLimitClose() { | 
|         return BindingBuilder.bind(queueLimitClose()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_LIMIT_CLOSE); | 
|     } | 
|   | 
|     /** | 
|      * 爆仓 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Binding bindingCoinout() { | 
|         return BindingBuilder.bind(queueCoinout()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_COINOUT); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 价格操作 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Binding bindingPriceoperate() { | 
|         return BindingBuilder.bind(queuePriceoperate()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_PRICEOPERATE); | 
|     } | 
|   | 
|     /** | 
|      * 平仓绑定 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Binding bindingCloseTrade() { | 
|         return BindingBuilder.bind(queueCloseTrade()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_CLOSETRADE); | 
|     } | 
|   | 
|     /** | 
|      * 全仓爆仓绑定 | 
|      * | 
|      * @return | 
|      */ | 
|     @Bean | 
|     public Binding bindingWholeBomb() { | 
|         return BindingBuilder.bind(queueWholeBomb()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_WHOLE_BOMB); | 
|     } | 
|   | 
| } |