package com.enniu.cloud.services.zjxafter.config;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfigurationProperties {
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setAddresses("127.0.0.1:5672");
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
connectionFactory.setVirtualHost("/");
connectionFactory.setPublisherConfirms(false); //必须要设置
return connectionFactory;
}
@Bean(name = "RabbitListener")
public SimpleRabbitListenerContainerFactory messageContainer() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
return factory;
}
@Bean(name = "Exchange")
public TopicExchange fcLoanSysOrderExchange() {
return new TopicExchange("Exchange");
}
@Bean(name = "orders")
public Queue dtOrderLifeCycleQueue() {
return new Queue("orders", true);
}
@Bean
public Binding fcLoanSysBinding() {
return BindingBuilder.bind(dtOrderLifeCycleQueue()).to(fcLoanSysOrderExchange())
.with("order.*");
}
}
@Component
@Slf4j
public class RabbitMqListener{
@RabbitListener(queues = "rc_aries_zjx_orders",containerFactory = "fcLoanSysRabbitListener")
public void onMessage(@Payload byte[] data,
@Header(AmqpHeaders.CHANNEL) Channel channel,
@Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) throws IOException {
val message = data == null || data.length == 0 ? "" : new String(data, StandardCharsets.UTF_8);
//业务逻辑
channel.basicAck(deliveryTag, false); //消息处理成功,回复确认
channel.basicReject(deliveryTag, true); //消息处理失败,回复确认
}
}