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; import java.util.HashMap; import java.util.Map; /** * @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 QUEUE_FOLLOW_ORDER = "QUEUE_FOLLOW_ORDER"; public static final String ROUTINGKEY_FOLLOW_ORDER = "ROUTINGKEY_FOLLOW_ORDER"; // 跟单调整保证金 public static final String QUEUE_FOLLOW_CHANGE_BOND = "QUEUE_FOLLOW_CHANGE_BOND"; public static final String ROUTINGKEY_FOLLOW_CHANGE_BOND = "ROUTINGKEY_FOLLOW_CHANGE_BOND"; // 开多止盈路由键 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"; public static final String ROUTINGKEY_MARKET_BUSSINESS = "ROUTINGKEY_MARKET_BUSSINESS"; public static final String QUEUE_MARKET_BUSSINESS = "QUEUE_MARKET_BUSSINESS"; public static final String ROUTING_KEY_DELAY = "route.delay"; public static final String QUEUE_DELAY = "queue.delay"; public static final String EXCHANGE_DELAY = "exchange.delay"; @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 DirectExchange delayExchange() { return new DirectExchange(EXCHANGE_DELAY); } @Bean public Queue delayQueue() { Map params = new HashMap<>(); // x-dead-letter-exchange 声明了队列里的死信转发到的DLX名称, params.put("x-dead-letter-exchange", EXCHANGE_DELAY); // x-dead-letter-routing-key 声明了这些死信在转发时携带的 routing-key 名称。 params.put("x-dead-letter-routing-key", ROUTING_KEY_DELAY); // params.put("x-message-ttl", 6000); return new Queue(QUEUE_DELAY, true, false, false, params); } @Bean public Binding delayBinding() { return BindingBuilder.bind(delayQueue()).to(delayExchange()).with(ROUTING_KEY_DELAY); } @Bean public Queue marketBussinessQueue() { return new Queue(QUEUE_MARKET_BUSSINESS); } @Bean public Binding marketBussinessBinding() { return BindingBuilder.bind(marketBussinessQueue()).to(defaultExchange()).with(ROUTINGKEY_MARKET_BUSSINESS); } @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 Queue queueFollowOrder() { return new Queue(QUEUE_FOLLOW_ORDER, true); } @Bean public Queue queueFollowChangeBond() { return new Queue(QUEUE_FOLLOW_CHANGE_BOND, true); } @Bean public Binding bindingFollowChangeBond() { return BindingBuilder.bind(queueFollowChangeBond()).to(orderExchange()).with(ROUTINGKEY_FOLLOW_CHANGE_BOND); } @Bean public Binding bindingFollowOrder() { return BindingBuilder.bind(queueFollowOrder()).to(orderExchange()).with(RabbitMqConfig.ROUTINGKEY_FOLLOW_ORDER); } @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); } }