关于rabbitmq相关的名词定义可查看 https://mp.weixin.qq.com/s/OABseRR0BnbK9svIPyLKXw
linux:搭建rabbitmq 地址:https://blog.youkuaiyun.com/qq_29312259/article/details/83347442
开始搭建:
pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
application.yml配置文件
spring:
rabbitmq:
host: 172.16.32.241
port: 5672
username: admin
password: 123456
virtualHost: /msg #需给admin virtualHost 为/msg的权限
介绍Exchange Typ:
RabbitMQ常用的Exchange Type有fanout、direct、topic、headers这四种
fanout:广播,即只要绑定了此交换机,都会接到消息
direct:它会把消息路由到那些Binding key与Routing key完全匹配的Queue中
topic:模糊匹配,与direct相似,只是Routing Key是由点(.)分隔的,可模糊匹配*或#,*用于匹配一个单词,"#"用于匹配多个单词(可以是零个)
模拟实际项目的中的发邮件功能:
direct模式为例:
config类:
@Configuration
public class RabbitmqConfig {
@Bean
public Queue Queue() {
// 设置管道,名称为:email_queue
return new Queue("email_queue");
}
}
service层,即生产者端:
@Service
public class RabbitmqServiceImpl implements RabbitmqService {
@Autowired
private AmqpTemplate rabbitTemplate;
@Override
public String sendEmail(String msg) {
for (int i=0;i<5;i++) {
//Routing Key为email_queue
rabbitTemplate.convertAndSend("email_queue",msg + i);
}
return "success";
}
}
消费者端:(正常分布式项目中的消费者会是一个单独的项目,为了测试,创建在一个项目中即可)
@Component
@RabbitListener(queues = "email_queue")
public class RabbitMqCustomer {
@RabbitHandler
public void process(String msg) {
System.out.println("Receiver1 : " + msg);
//调用实际发邮件方法
}
}
测试:浏览器输入http://localhost:8080/sendEmail?msg=你好
控制台:
Receiver1 : 你好0
Receiver1 : 你好1
Receiver1 : 你好2
Receiver1 : 你好3
Receiver1 : 你好4