rabbitmq topic模式

配置文件

 1 #rabbitmq
 2 spring.rabbitmq.virtual-host=/
 3 spring.rabbitmq.host=127.0.0.1
 4 spring.rabbitmq.port=5672
 5 spring.rabbitmq.username=admin
 6 spring.rabbitmq.password=admin
 7 
 8 spring.rabbitmq.listener.simple.concurrency=6
 9 spring.rabbitmq.listener.simple.max-concurrency=15
10 spring.rabbitmq.listener.simple.prefetch=10
11 #消息确认机制开启
12 spring.rabbitmq.publisher-confirms=true
13 #消息失败返回机制
14 spring.rabbitmq.publisher-returns=true
15 
16 
17 #\u5F02\u6B65\u53D1\u9001\u7684\u6D88\u606F\u6A21\u578B
18 stock.item.exchange=stock.item.exchange
19 
20 stock.item.queue=stock.item.queue
21 stock.item.routing.key=stock.item.routing.key
22 
23 daily.item.queue=daily.item.queue
24 daily.item.routing.key=daily.item.routing.key
25 
26 five.item.queue=five.item.queue
27 five.item.routing.key=five.item.routing.key
View Code

producer

 1 @Autowired
 2     private RabbitTemplate rabbitTemplate;
 3 
 4     @Value("${stock.item.exchange}")
 5     private String exchange;
 6 
 7     @Value("${stock.item.routing.key}")
 8     private String stockRoutingKey;
 9 
10     @Value("${daily.item.routing.key}")
11     private String dailyRoutingKey;
12 
13     @Value("${five.item.routing.key}")
14     private String fiveRoutingKey;
15 
16 public void run(){
17 SubInitEle sie = new SubInitEle();
18 rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
19                                 rabbitTemplate.convertAndSend(exchange, stockRoutingKey, sie);
20                                 rabbitTemplate.convertAndSend(exchange, dailyRoutingKey, sie);
21                                 rabbitTemplate.convertAndSend(exchange, fiveRoutingKey, sie);
22 }
View Code

consumer

  1 @Component
  2 public class StockRabbitComsumer {
  3     private Logger log = LoggerFactory.getLogger(StockRabbitComsumer.class);
  4 
  5     @Autowired
  6     private RedisManager redisManager;
  7 
  8     @RabbitListener(queues = "${stock.item.queue}")
  9     public void consumeStock(SubInitEle sie){
 10         try {
 11             log.info("接收消息:{}",sie.getStockCode());
 12             //整合发送消息的逻辑
 13      
 14         }catch (Exception e){
 15             log.error("接收消息-发生异常:",e.fillInStackTrace());
 16         }
 17     }
 18 
 19     @RabbitListener(queues = "${stock.item.queue}")
 20     public void consumeStock2(SubInitEle sie){
 21         try {
 22             log.info("接收消息:{}",sie.getStockCode());
 23             //整合发送消息的逻辑
 24            
 25         }catch (Exception e){
 26             log.error("接收消息-发生异常:",e.fillInStackTrace());
 27         }
 28     }
 29 
 30     @RabbitListener(queues = "${stock.item.queue}")
 31     public void consumeStock3(SubInitEle sie){
 32         try {
 33             log.info("接收消息:{}",sie.getStockCode());
 34             //整合发送消息的逻辑
 35             
 36         }catch (Exception e){
 37             log.error("接收消息-发生异常:",e.fillInStackTrace());
 38         }
 39     }
 40 
 41 @RabbitListener(queues = "${five.item.queue}")
 42     public void consumeFive(SubInitEle sie){
 43         try {
 44             log.info("接收消息:{}",sie.getStockCode());
 45             //整合发送消息的逻辑
 46            
 47         }catch (Exception e){
 48             log.error("接收消息-发生异常:",e.fillInStackTrace());
 49         }
 50     }
 51 
 52     @RabbitListener(queues = "${five.item.queue}")
 53     public void consumeFive2(SubInitEle sie){
 54         try {
 55             log.info("接收消息:{}",sie.getStockCode());
 56             //整合发送消息的逻辑
 57             
 58         }catch (Exception e){
 59             log.error("接收消息-发生异常:",e.fillInStackTrace());
 60         }
 61     }
 62 
 63     @RabbitListener(queues = "${five.item.queue}")
 64     public void consumeFive3(SubInitEle sie){
 65         try {
 66             log.info("接收消息:{}",sie.getStockCode());
 67             //整合发送消息的逻辑
 68            
 69         }catch (Exception e){
 70             log.error("接收消息-发生异常:",e.fillInStackTrace());
 71         }
 72     }
 73 
 74 @RabbitListener(queues = "${daily.item.queue}")
 75     public void consumeDaily(SubInitEle sie){
 76         try {
 77             log.info("接收消息:{}",sie.getStockCode());
 78             //整合发送消息的逻辑
 79            
 80         }catch (Exception e){
 81             log.error("接收消息-发生异常:",e.fillInStackTrace());
 82         }
 83     }
 84 
 85     @RabbitListener(queues = "${daily.item.queue}")
 86     public void consumeDaily2(SubInitEle sie){
 87         try {
 88             log.info("接收消息:{}",sie.getStockCode());
 89             //整合发送消息的逻辑
 90            
 91         }catch (Exception e){
 92             log.error("接收消息-发生异常:",e.fillInStackTrace());
 93         }
 94     }
 95 
 96     @RabbitListener(queues = "${daily.item.queue}")
 97     public void consumeDaily3(SubInitEle sie){
 98         try {
 99             log.info("接收消息:{}",sie.getStockCode());
100             //整合发送消息的逻辑
101             
102         }catch (Exception e){
103             log.error("接收消息-发生异常:",e.fillInStackTrace());
104         }
105     }
106 }
View Code

配置类

  1 @Configuration
  2 public class RabbitConfig {
  3     private final static Logger log = LoggerFactory.getLogger(RabbitConfig.class);
  4 
  5     @Value("${spring.rabbitmq.listener.simple.concurrency}")
  6     private int concurrentConsumers;
  7     @Value("${spring.rabbitmq.listener.simple.max-concurrency}")
  8     private int maxConcurrentConsumers;
  9     @Value("${spring.rabbitmq.listener.simple.prefetch}")
 10     private int prefetchCount;
 11 
 12     @Value("${stock.item.queue}")
 13     private String stockQueue;
 14     @Value("${daily.item.queue}")
 15     private String dailyQueue;
 16     @Value("${five.item.queue}")
 17     private String fiveQueue;
 18 
 19     @Value("${stock.item.exchange}")
 20     private String exchange;
 21 
 22     @Value("${stock.item.routing.key}")
 23     private String stockRoutingKey;
 24     @Value("${daily.item.routing.key}")
 25     private String dailyRoutingKey;
 26     @Value("${five.item.routing.key}")
 27     private String fiveRoutingKey;
 28 
 29     @Autowired
 30     private CachingConnectionFactory connectionFactory;
 31 
 32     @Autowired
 33     private SimpleRabbitListenerContainerFactoryConfigurer factoryConfigurer;
 34 
 35     //单一消费者
 36     @Bean(name = "singleListenerContainer")
 37     public SimpleRabbitListenerContainerFactory listenerContainer(){
 38         SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
 39         factory.setConnectionFactory(connectionFactory);
 40         factory.setMessageConverter(new Jackson2JsonMessageConverter());
 41         factory.setConcurrentConsumers(1);
 42         factory.setMaxConcurrentConsumers(1);
 43         factory.setPrefetchCount(1);
 44         factory.setTxSize(1);
 45         return factory;
 46     }
 47 
 48     //多个消费者
 49     @Bean(name = "stockMultiListenerContainer")
 50     public SimpleRabbitListenerContainerFactory multiListenerContainer(){
 51         SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
 52         factoryConfigurer.configure(factory,connectionFactory);
 53         factory.setMessageConverter(new Jackson2JsonMessageConverter());
 54         //确认消费模式-NONE
 55         factory.setAcknowledgeMode(AcknowledgeMode.AUTO);
 56         factory.setDefaultRequeueRejected(false);
 57         factory.setConcurrentConsumers(concurrentConsumers);
 58         factory.setMaxConcurrentConsumers(maxConcurrentConsumers);
 59         factory.setPrefetchCount(prefetchCount);
 60         return factory;
 61     }
 62 
 63     @Bean
 64     public RabbitTemplate rabbitTemplate(){
 65         connectionFactory.setPublisherConfirms(true);
 66         connectionFactory.setPublisherReturns(true);
 67         RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
 68         rabbitTemplate.setMandatory(true);
 69         rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
 70             @Override
 71             public void confirm(CorrelationData correlationData, boolean ack, String cause) {
 72                 log.info("消息发送成功:correlationData({}),ack({}),cause({})",correlationData,ack,cause);
 73             }
 74         });
 75         rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
 76             @Override
 77             public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
 78                 log.warn("消息丢失:exchange({}),route({}),replyCode({}),replyText({}),message:{}",exchange,routingKey,replyCode,replyText,message);
 79             }
 80         });
 81         return rabbitTemplate;
 82     }
 83 
 84     //构建异步发送通知的消息模型
 85     @Bean
 86     public Queue successStockQueue(){
 87         return new Queue(stockQueue,true);
 88     }
 89 
 90     @Bean
 91     public Queue successDailyQueue(){
 92         return new Queue(dailyQueue,true);
 93     }
 94 
 95     @Bean
 96     public Queue successFiveQueue(){
 97         return new Queue(fiveQueue,true);
 98     }
 99 
100     @Bean
101     public TopicExchange successExchange(){
102         return new TopicExchange(exchange,true,false);
103     }
104 
105     @Bean
106     public Binding successStockBinding(){
107         return BindingBuilder.bind(successStockQueue()).to(successExchange()).with(stockRoutingKey);
108     }
109 
110     @Bean
111     public Binding successDailyBinding(){
112         return BindingBuilder.bind(successDailyQueue()).to(successExchange()).with(dailyRoutingKey);
113     }
114 
115     @Bean
116     public Binding successFiveBinding(){
117         return BindingBuilder.bind(successFiveQueue()).to(successExchange()).with(fiveRoutingKey);
118     }
119 
120     @Bean
121     public MessageConverter jsonMessageConverter(ObjectMapper objectMapper) {
122         return new Jackson2JsonMessageConverter(objectMapper);
123     }
View Code

 

posted @ 2021-06-11 11:25  baishu  阅读(89)  评论(0)    收藏  举报