微服务——信息处理微服务(rabbitMQ)
安装rabbitMQ
第一步:父工程下创建sms子工程
第二步:pom添加依赖
<!--rabbitMQ-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
第三步:添加启动类与application.yml配置
server:
port: 9002
spring:
application:
name: search-sms
rabbitmq:
host: 127.0.0.1
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
第四步:在rabbitMQ中创建消息队列
rabbitMQ的三种种模式
1.直接模式(Direct)
直接模式不需要创建Exchange,只需要创建队列。默认的Exchange会直接根据名字routingkey直接把消息发送到指定queue中。
2.分裂模式(Fanout)
任何与Exchange绑定的队列都会收到消息。如果Exchange没有绑定queue,消息就会被抛弃。
3.主题模式(Topic)
Exchange交换器根据routingkey根据规则将消息发送到指定队列。如果匹配不到queue,消息会被抛弃。
本文以创建直接模式为例
Exchange绑定队列queue
第五步:编写searchroom_sms队列监听类(消费者)
/**
* 消费者
* 监听rabbit searchroom_sms
* @author zxf
*/
@Component
@RabbitListener(queues = "searchroom_sms")
public class SearchroomQueueLstener {
@RabbitHandler
public void sendPhoneMsg(Map<String, String> map){
String phoneNumber = map.get("phoneNumber");
String checkCode = map.get("checkCode");
System.out.println(phoneNumber+"__"+checkCode);
}
}
第六步:编写生产者类。用户微服务发送消息到MQ
用户微服务也需要添加rabbit的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
添加rabbit的application.yml配置
rabbitmq:
host: 127.0.0.1 #rabbitMQ
编写生产者代码
@Autowired
RedisTemplate redisTemplate;
@Autowired
RabbitTemplate rabbitTemplate;
/**
* 手机发送验证码
* @param phoneNumber
* @return
*/
@Override
public ServiceResult sendPhoneCode(String phoneNumber) {
//判断手机号是否正确
if (!this.checkPhoneNumber(phoneNumber)){
ServiceResult result = new ServiceResult();
result.setMessage("手机号不正确");
result.setStatus(ServiceResult.Status.PARAMERROR.getCode());
return result;
}
//生成六位数字验证码
String checkCode = RandomStringUtils.randomNumeric(6);
//redis中保存一份用于校验 保存一分钟
redisTemplate.opsForValue().set("checkCode_"+phoneNumber, checkCode, 1, TimeUnit.MINUTES);
Map<String, String> map = new HashMap<>();
map.put("phoneNumber", phoneNumber);
map.put("checkCode", checkCode);
//将手机号与验证码发送给rabbitmq队列
rabbitTemplate.convertAndSend("searchroom_sms", map);
return ServiceResult.seccess("成功发送验证码", checkCode);
}
编写测试类
@SpringBootTest
@RunWith(SpringRunner.class)
public class RabbitMqTest {
@Autowired
UserService userService;
/**
* rabbitmq测试
*/
@Test
public void testSms(){
ServiceResult result = userService.sendPhoneCode("17687374997");
System.out.println(JSON.toJSONString(result));
}
}
第七步:测试
启动searchroom_sms工程启动类
运行searchroom_user工程测试代码,验证码为582411
查看searchroom_sms工程,成功接收到发送的消息