今天主要介绍一下,前些天对SpringBoot集成RabbitMq一些工作的总结:
1、maven包引入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2、MQ配置文件配置:
springBoot配置文件方式有两种,一种是yml,一种是properties,以yml为例:
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: root
password: root
这里说一下,如果连接的本地默认配置的rabbitMq,这些属性配置也是可以省略的。
3、RabbitMq代码使用方式:
//1、配置队列Queue
@Bean(name = "messages")
public Queue queueMessage() {
return new Queue("demo.user.update");
}
//2、配置交换机Exchange
@Bean(name = "exchange" )
public TopicExchange exchange() {
return new TopicExchange("exchange");
}
//3、将队列按照相应的规则绑定到交换机上
@Bean
Binding bindingExchangeMessages(@Qualifier("message") Queue queueMessages,
T@Qualifier("exchange")opicExchange exchange) {
return BindingBuilder.bind(queueMessages).to(exchange).with("demo.user.*");
}
4、生产和消费消息:
生产者:
//注入template
@Autowired
private AmqpTemplate template;
//发送消息
public void Sender(){
template.convertAndSend("exchange","tdemo.user.update","user updated ");
}
消费者:
// 监听器监听指定的queue,这里也可以指定多个队列
@RabbitListener(queues="messages")
public void process2(String message){
System.out.println("received messages is : "+message);
}
如果是单个MQ源到此就可以结束了!
但是很多业务场景下可能监听不同的MQ服务,而每个MQ服务是不同的业务线自己搭建的服务,需要配置多个MQ源。
多个MQ源需要生命ConnectionFactory 和 RabbitTemplate
//声明ConnectionFactory
@Bean(name = "firstConnectionFactory")
@Primary
public ConnectionFactory firstSyncConnectionFactory(
@Value("${spring.rabbitmq.first.host}") String host,
@Value("${spring.rabbitmq.first.port}") int port,
@Value("${spring.rabbitmq.first.username}") String username,
@Value("${spring.rabbitmq.first.password}") String password,
@Value("${spring.rabbitmq.first.virtual-host}") String virtualHost) {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(host);
connectionFactory.setPort(port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(virtualHost);
return connectionFactory;
}
//声明RabbitTemplate
@Bean(name = "firstRabbitTemplate")
@Primary
public RabbitTemplate firstRabbitTemplate(
@Qualifier("phpConnectionFactory") ConnectionFactory connectionFactory) {
RabbitTemplate hospSyncRabbitTemplate = new RabbitTemplate(connectionFactory);
return hospSyncRabbitTemplate;
}
//消费端监听Linstener
@Bean(name = "firstListenerContainerFactory")
public SimpleRabbitListenerContainerFactory firstSyncFactory(
SimpleRabbitListenerContainerFactoryConfigurer configurer,
@Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory
) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
生产者:
//注入template
@Autowired
private AmqpTemplate firstRabbitTemplate;
//发送消息
public void Sender(){
firstRabbitTemplate.convertAndSend("exchange","tdemo.user.update","user updated ");
}
消费者:
// 监听器监听指定的queue,这里也可以指定多个队列
@RabbitListener(queues = {"messages"},
containerFactory="firstListenerContainerFactory")
public void processMessage(String message) {
System.out.println("received messages is : "+message);
}
到此SpringBoot集成RabbitMq常用方式介绍结束了。这里只介绍了topic模式,其他的direct、fanout更简单一些,不再介绍!