MQConfig
@Configuration
@ConditionalOnProperty(name = "spring.rabbitmq.addresses", havingValue = "")
public class MQConfig implements RabbitListenerConfigurer {
public static final String QUEUE_DEALER_PURCHASE_MANAGER_APPROVED_3H = "dgmq-queue-dealer-purchase-manager-approved-3h";
@Bean
@Primary
public RabbitTemplate rabbitTemplate() {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
return rabbitTemplate;
}
@Bean
public Exchange delayExchange() {
return ExchangeBuilder.directExchange(EXCHANGE_DELAY).durable(true).delayed().withArgument("x-delayed-type", "direct")
.build();
}
@Bean
public Binding bindingApproved3h(DirectExchange delayExchange, Queue approved3h) {
return BindingBuilder.bind(approved3h).to(delayExchange).withQueueName();
}
@Bean
public Queue approved3h() {
return new Queue(MQConfig.QUEUE_DEALER_PURCHASE_MANAGER_APPROVED_3H, true);
}
@Override
public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) {
registrar.setMessageHandlerMethodFactory(myHandlerMethodFactory());
}
@Bean
public DefaultMessageHandlerMethodFactory myHandlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
factory.setMessageConverter(new MappingJackson2MessageConverter());
return factory;
}
}
RabbitMQService
@Component
public class RabbitMQService {
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendDelay(String queue, Object t, Integer sec) {
rabbitTemplate.convertAndSend(MQConfig.EXCHANGE_DELAY, queue, t, new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message message) throws AmqpException {
message.getMessageProperties().setDelay(sec * 1000);
return message;
}
});
}
public void send(String routingKey, Object object) {
rabbitTemplate.convertAndSend(routingKey, object);
}
public void sendDealerPurchaseNofity(String title, String content) {
rabbitTemplate.convertAndSend("amq.topic", "dealer-purchase-nofity", new NotifyMO(title, content));
}
public void sendTopic(String routingKey, Object object) {
rabbitTemplate.convertAndSend("amq.topic", routingKey, object);
}
}