代码改变世界

整合Rabbit MQ发送短信

2022-09-21 14:00  ly772186472  阅读(225)  评论(0)    收藏  举报

1、访问MQ控制台

http://192.168.100.103:15672

 

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);
    }
}