整合Rabbit MQ发送短信
2022-09-21 14:00 ly772186472 阅读(225) 评论(0) 收藏 举报1、访问MQ控制台
2、创建用户
创建用户 srbuser,配置管理员权限
记着 添加权限 ---administrator
3、创建虚拟机
创建虚拟机 /srbhost,在Set permission中为新建的用户分配访问虚拟机 /srbhost 和 / 的权限
温馨提醒: 记着添加 /权限 --- 添加对应目录时也要选择 / eg: /user
如果没有对根目录 访问权限 那么对 根目录下的其他目录也没有权限
如果没有对根目录 访问权限 那么对 根目录下的其他目录也没有权限
二、创建rabbit-mq模块
1、创建模块
srb下创建rabbit-mq模块
2、引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
3、创建MQConfig
@Configuration public class MQConfig { @Bean public MessageConverter messageConverter(){ //json字符串转换器 return new Jackson2JsonMessageConverter(); } }
4、创建MQConst
public class MQConst { public static final String EXCHANGE_TOPIC_SMS = "exchange.topic.sms";//交换机 public static final String ROUTING_SMS_ITEM = "routing.sms.item";//路由 public static final String QUEUE_SMS_ITEM = "queue.sms.item";//消息队列 }
5、创建MQService
@Service @Slf4j public class MQService { @Resource private AmqpTemplate amqpTemplate; public boolean sendMessage(String exchange, String routingKey, Object message){ log.info("发送消息。。。。。。"); amqpTemplate.convertAndSend(exchange, routingKey, message); return true; } }
三、service-base中创建SmsDTO
@Data @ApiModel(description = "短信") public class SmsDTO { @ApiModelProperty(value = "手机号") private String mobile; @ApiModelProperty(value = "消息内容") private String message; }
四、service-core中发送消息
1、引入依赖
<!--rabbitmq消息队列-->
<dependency>
<groupId>com.guigu</groupId>
<artifactId>rabbit-mq</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2、添加yml配置
#spring: rabbitmq: host: 192.168.100.103 port: 5672 virtual-host: /srbhost20092101 username: srbuser200921 password: 123456
3、根据bindCode获取手机号
UserInfoService接口
String getMobileByBindCode(String bindCode);
UserInfoServiceImpl实现:
@Override public String getMobileByBindCode(String bindCode) { QueryWrapper<UserInfo> userInfoQueryWrapper = new QueryWrapper<>(); userInfoQueryWrapper.eq("bind_code", bindCode); UserInfo userInfo = baseMapper.selectOne(userInfoQueryWrapper); return userInfo.getMobile(); }
4、向MQ发送消息
UserAccountServiceImpl 充值回调方法的最后添加发送消息的代码:
//发消息 String mobile = userInfoService.getMobileByBindCode(bindCode); SmsDTO smsDTO = new SmsDTO(); smsDTO.setMobile(mobile); smsDTO.setMessage("充值成功"); mqService.sendMessage( MQConst.EXCHANGE_TOPIC_SMS, MQConst.ROUTING_SMS_ITEM, smsDTO );
五、service-sms中监听消息
1、引入依赖
<!--rabbitmq消息队列-->
<dependency>
<groupId>com.guigu</groupId>
<artifactId>rabbit-mq</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2、添加配置 yml
#spring: rabbitmq: host: 192.168.100.103 port: 5672 virtual-host: /srbhost20092101 username: srbuser200921 password: 123456
3、创建MQ监听器
@Component @Slf4j public class SmsReceiver { @Resource private SmsService smsService; @RabbitListener(bindings = @QueueBinding( value = @Queue(value = MQConst.QUEUE_SMS_ITEM, durable = "true"), exchange = @Exchange(value = MQConst.EXCHANGE_TOPIC_SMS), key = {MQConst.ROUTING_SMS_ITEM} )) public void send(SmsDTO smsDTO){ log.info("SmsReceiver消息监听。。。。。。"); HashMap<String, Object> param = new HashMap<>(); param.put("code", smsDTO.getMessage()); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } // smsService.send(smsDTO.getMobile(), SmsProperties.TEMPLATE_CODE, param); } }
浙公网安备 33010602011771号