package rabbitmq.config.consumer; import org.springframework.amqp.core.AcknowledgeMode; 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.listener.SimpleMessageListenerContainer; import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter; import org.springframework.amqp.rabbit.transaction.RabbitTransactionManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import rabbitmq.config.AbstractDataRabbitConfiguration; import rabbitmq.gateway.UserDataHandler; /** * * @author XiaoZhi * */ //@Configuration public class RabbitUserConsumerConfiguration extends AbstractDataRabbitConfiguration{ protected static String routingKey = "user.basic.data.key"; protected static String EXCHANGE_NAME = "user.basic.data.exchange"; //@Value("${basic.data.routing.key:user.basic.data.queue}") //private String routingKey = "user.basic.data.key"; @Autowired private UserDataHandler userDataHandler; @Autowired private MyErrorHandler myErrorHandler; // @Autowired // private RabbitTransactionManager rabbitTransactionManager; // @Override // protected void configureRabbitTemplate(RabbitTemplate rabbitTemplate) { // rabbitTemplate.setRoutingKey(routingKey); // } // @Bean // public Binding marketDataBinding() { // return BindingBuilder.bind(dataQueue()).to(marketDataExchange()); // } @Bean public DirectExchange marketDataExchange() { return new DirectExchange(EXCHANGE_NAME); } @Bean public Binding marketDataBinding() { return BindingBuilder.bind(dataQueue()).to(marketDataExchange()).with(routingKey); } @Bean public Queue dataQueue() { return new Queue("user.data.queue",true, false, false); } @Bean public SimpleMessageListenerContainer messageListenerContainer() { SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory()); //container.setTransactionManager(rabbitTransactionManager); container.setQueues(dataQueue()); //container.setChannelTransacted(true); container.setErrorHandler(this.myErrorHandler); //container.setAcknowledgeMode(AcknowledgeMode.MANUAL); container.setMessageListener(messageListenerAdapter()); //container.setDefaultRequeueRejected(false); //container.setConcurrentConsumers(5);//消息顺序将不被保障 return container; } @Bean public MessageListenerAdapter messageListenerAdapter() { MessageListenerAdapter mAdapter = new MessageListenerAdapter(userDataHandler, jsonMessageConverter()); mAdapter.setDefaultListenerMethod("handleUserDataMessage"); return mAdapter; } }