1.maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.yml配置
spring:
#rabbitmq配置
rabbitmq:
####连接地址
host: 39.108.107.163
####端口号
port: 5672
####账号
username: root
####密码
password: root
### 地址
virtual-host: /distributed (如果rabbitmq服务器没有这个host,去服务器上新建,或者使用 / 即可)
3.rabbitmq配置,设置队列,交换机,绑定交换机等
@Configuration
public class RabbitMqConfig {
/**
* 定义队列名,交换机名,路由键名
*/
private String emailQueue = "email_queue";
private String smsQueue = "sms_queue";
private String exchangeName = "topicExchange";
private String smsKey="login.*";
private String emailKey="login.email";
/**
* 定义邮件队列
* @return
*/
@Bean
public Queue emailQueue() {
return new Queue(emailQueue);
}
/**
* 定义短信队列
* @return
*/
@Bean
public Queue smsQueue() {
return new Queue(smsQueue);
}
/**
* 定义Topic交换机
* @return
*/
@Bean
TopicExchange topicExchange() {
return new TopicExchange(exchangeName);
}
/**
* topic交换机和邮件队列进行绑定
* @return
*/
@Bean
Binding bindingExchangeEamil() {
return BindingBuilder.bind(emailQueue()).to(topicExchange()).with(emailKey);
}
/**
* topic交换机和短信队列进行绑定
* @return
*/
@Bean
Binding bindingExchangeSms() {
return BindingBuilder.bind(smsQueue()).to(topicExchange()).with(smsKey);
}
}
4.生产消息类:
@Component
@Slf4j
public class RabbitMqProducerUtil {
@Autowired
private AmqpTemplate amqpTemplate;
/**
* @Description 向rabbitmq服务器发生消息
* @param topicName 交换机名
* @param msg 信息
*/
public void sendMsg(String topicName,String routingKey,String msg){
//第二个参数为路由键
amqpTemplate.convertAndSend(topicName,routingKey,msg);
}
}
5.消费者消息类(我这里生产者,消费者都在一个项目里)
@Component
@Slf4j
public class RabbitMqConsumerUtil {
@RabbitListener(queues="email_queue")
public void emailConsumer(String msg) throws Exception {
log.info("邮件消费者消费信息为"+msg);
}
@RabbitListener(queues="sms_queue")
public void smsConsumer(String msg) throws Exception {
log.info("短信消费者消费信息为"+msg);
}
}
6.启动类添加注解:@EnableRabbit
7.api接口测试:
@GetMapping("/producer")
public String producer(String topicName,String routingKey,String msg){
rabbitMqProducerUtil.sendMsg(topicName,routingKey,msg);
return "向rabbitmq服务器发送消息成功";
}