SpringBoot整合RabbitMQ
Erlang语言配置、RabbitMQ安装、RabbitMQ plugin安装就不介绍了
1. maven依赖
<dependencies>
<!--springboot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--rabbitmq-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!--aop-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--mvc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. RabbitMQ配置
package com.spring.rabbitmq.config;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author gyh
* @csdn https://blog.csdn.net/qq_40788718
* @date 2020/5/4 20:40
*
* 连接rabbitMQ的基本配置
*/
@Configuration
public class RabbitmqConfig {
@Bean
public ConnectionFactory connectionFactory() {
//地址
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("127.0.0.1");
//端口
connectionFactory.setPort(5672);
connectionFactory.setUsername("用户名");
connectionFactory.setPassword("密码");
connectionFactory.setVirtualHost("虚拟主机名");
return connectionFactory;
}
@Bean
public AmqpAdmin amqpAdmin(){
return new RabbitAdmin(connectionFactory()) ;
}
@Bean
public RabbitTemplate rabbitTemplate() {
return new RabbitTemplate(connectionFactory()) ;
}
@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setConcurrentConsumers(3);
factory.setMaxConcurrentConsumers(10);
return factory;
}
}
3. Exchange配置
package com.spring.rabbitmq.config;
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.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author gyh
* @csdn https://blog.csdn.net/qq_40788718
* @date 2020/5/9 15:45
*
* DirectExchangeConfig 一个交换机 两个队列 两个binding
*/
@Configuration
public class DirectExchangeConfig {
//创建一个direct的exchange
@Bean(value = "messageExchange1")
public DirectExchange directExchange(){
DirectExchange directExchange = new DirectExchange("message.exchange1");
return directExchange ;
}
//direct的exchange和队列message1绑定
@Bean(value = "messageExchange1ToMessage1")
public Binding messageExchange1ToMessage1(@Qualifier("message1")Queue message1){
return BindingBuilder.bind(message1).to(directExchange()).with("message1") ;
}
//direct的exchange和队列message3绑定
@Bean(value = "messageExchange1ToMessage3")
public Binding messageExchange1ToMessage3(@Qualifier("message3")Queue message3){
return BindingBuilder.bind(message3).to(directExchange()).with("message3") ;
}
}
package com.spring.rabbitmq.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author gyh
* @csdn https://blog.csdn.net/qq_40788718
* @date 2020/5/9 19:49
*/
@Configuration
public class FanoutExchangeConfig {
//创建一个fanout的exchange
@Bean(value = "messageExchange2")
public FanoutExchange fanoutExchange(){
FanoutExchange fanoutExchange = new FanoutExchange("message.exchange2") ;
return fanoutExchange ;
}
//fanout的exchange和message2绑定
@Bean(value = "messageExchange2ToMessage2")
public Binding messageExchange2ToMessage2(@Qualifier("message2")Queue message2){
return BindingBuilder.bind(message2).to(fanoutExchange()) ;
}
//fanout的exchange和message4绑定
@Bean(value = "messageExchange2ToMessage4")
public Binding messageExchange2ToMessage4(@Qualifier("message4")Queue message4){
return BindingBuilder.bind(message4).to(fanoutExchange()) ;
}
}
4. Queue配置
package com.spring.rabbitmq.config;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author gyh
* @csdn https://blog.csdn.net/qq_40788718
* @date 2020/5/9 16:08
* 设置四个队列接受消息
*/
@Configuration
public class RabbitmqQueueConfig {
@Bean(value = "message1")
public Queue message1(){
return new Queue("message1") ;
}
@Bean(value = "message2")
public Queue message2(){
return new Queue("message2") ;
}
@Bean(value = "message3")
public Queue message3(){
return new Queue("message3") ;
}
@Bean(value = "message4")
public Queue message4(){
return new Queue("message4") ;
}
}
5. Listener配置
package com.spring.rabbitmq.listener;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* @author gyh
* @csdn https://blog.csdn.net/qq_40788718
* @date 2020/5/9 20:59
*/
@Component
public class Message1Listener {
@RabbitListener(queues = "message1")
public void listener(String data){
System.out.println("收到【message1】消息:"+data);
}
}
package com.spring.rabbitmq.listener;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* @author gyh
* @csdn https://blog.csdn.net/qq_40788718
* @date 2020/5/9 21:00
*/
@Component
public class Message2Listener {
@RabbitListener(queues = "message2")
public void listener(String data){
System.out.println("收到【message2】消息:"+data);
}
}
package com.spring.rabbitmq.listener;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* @author gyh
* @csdn https://blog.csdn.net/qq_40788718
* @date 2020/5/9 21:00
*/
@Component
public class Message3Listener {
@RabbitListener(queues = "message3")
public void listener(String data){
System.out.println("收到【message3】消息:"+data);
}
}
package com.spring.rabbitmq.listener;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* @author gyh
* @csdn https://blog.csdn.net/qq_40788718
* @date 2020/5/9 21:00
*/
@Component
public class Message4Listener {
@RabbitListener(queues = "message4")
public void listener(String data){
System.out.println("收到【message4】消息:"+data);
}
}
6. Service配置
package com.spring.rabbitmq.service;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author gyh
* @csdn https://blog.csdn.net/qq_40788718
* @date 2020/5/9 21:46
*/
@Service("sendDirectService")
public class SendDirectService {
@Autowired
private RabbitTemplate rabbitTemplate ;
public void sendDataToMessage1(String data){
rabbitTemplate.convertAndSend("message.exchange1" , "message1" , data);
}
public void sendDataToMessage3(String data){
rabbitTemplate.convertAndSend("message.exchange1" , "message3" , data);
}
}
package com.spring.rabbitmq.service;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author gyh
* @csdn https://blog.csdn.net/qq_40788718
* @date 2020/5/9 22:15
*/
@Service("sendFanoutService")
public class SendFanoutService {
@Autowired
private RabbitTemplate rabbitTemplate ;
public void sendFanoutService(String data){
rabbitTemplate.convertAndSend("message.exchange2" , "" , data);
}
}