我是靠谱客的博主 野性香菇,最近开发中收集的这篇文章主要介绍利用RabbitMQ发送微信小程序订阅消息一、前期准备二、相关配置三、代码实现思路,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近在做项目的时候有一个新的需求是微信小程序,用户报名活动,用户积分变化,课程提醒的时候用户需要受到一条订阅消息,自己通过研究与开发,最终成功完成,接下来总结一下。

一、前期准备

RabbitMQ

1. 准备交换机和队列并将其绑定在一起

交换机:activeExchange
队列:activeQueue
路由 key:activeRouting

2. 设置 openId

这个 openId 是在用户表中的一个字段,具有唯一性,由系统自动生成。


二、相关配置

在spring boot的 yml 中的配置

1. RabbitMQ

host: xx.xxx.xxx.xxx
username: username
password: password
virtual-host: /

2. 微信小程序

id: XXXXXXXXXXXXXXXXX
secret: XXXXXXXXXXXX
mch_id: XXXXXXXXXXXXXXXX
mch_name: XXXXXXXXXXXXXXXX
key: XXXXXXXXXXXXXXXX
unifiedorder_url: XXXXXXXXXXXXXXXX
closeorder_url: XXXXXXXXXXXXXXXX

小程序的配置在自己注册时小程序开发面板都是可以获取到的,

3. 本次使用的是weixin-java

<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-miniapp</artifactId>
<version>4.1.0</version>

weixin-java 中已经封装好了一些方法,跟微信开发文档息息相关,


三、代码实现思路

1. 给队列中存入自己的内容

存放的内容有自己决定,这里存放用户id (userId) 以及活动id(activityId),表明了那位用户参加了哪项活动,发送消息为活动的具体内容,利用模板是RabbitTemplate

代码实现

public void saveQueue(Long activityId, Long userId){
	Map<String, Object> map = new HashMap<>();
    map.put("activityId", activityId);
    map.put("userId", userId);

    // 将信息添加到队列
    try {
        System.out.println("存入用户信息");
        rabbitTemplate.convertAndSend("activityExchange", "activityRouting", map);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

该方法在需要给队列中存入信息时调用。
这样就可以给队列中存入了信息,也就是生成者的作用已经完成了。接下来需要消费掉此消息。

2. 监听队列中的消息

@RabbitListener(queues = "activityQueue")
public void activityReceive(Map<String, Object> map){
  // map 集合汇总装有 活动 Id,用户 Id
  // 发送消息模板给用户
  xxxxService.sendTemplateToUser(map);
}

当队列中有加入信息之后就将会被监听到,然后调用对应的方法(发送消息模板给用户)即可。

3. sendTemplateToUser 方法

public void sendTemplateToUser(Map map) {
	if (!map.containsKey("activityId")&& !map.containsKey("userId")) {
        throw new BadRequestException("积分记录发送失败");
    }
    Long activityId = (Long) map.get("activityId");
    Long userId = (Long) map.get("userId");
    System.out.println(map);
    // 根据 userId 获取 用户信息
    User user = userMapper.selectById(userId);
    // 根据用户 openId 发送订阅消息
    sendSubscribeMsg(activityId,user.getOpenid());
}

4. 发送订阅消息具体方法

public void sendSubscribeMsg(Long activityId, String openId){
    Activity activity = activityMapper.selectById(activityId);
    if(ObjectUtil.isNull(activity)){
        log.error("【未能找到此活动】操作人:"+openId);
        throw new BadRequestException("【查询轰动为空】");
    }
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    WxMaSubscribeMessage message = new WxMaSubscribeMessage();
    message.setTemplateId("XXXXXXXXXXXXXXXXXXXXXXX");
    message.setToUser(openId);
    message.setPage("xxxxx/xxx/xxxx/xxxxx?activityId="+activityId);
    // 点击订阅消息跳转的版本:DEVELOPER: 开发版本,TRIAL:体验版本, FORMAL:正式版本
    message.setMiniprogramState(WxMaConstants.MiniProgramState.FORMAL);
    String content;
    content = activity.getDetail();
    if(ActivityContent.length() > 18){
        ActivityContent = activity.getDetail().substring(0, 15)+"...";
    }
    message.addData(new WxMaSubscribeMessage.MsgData("thing1", activity.getTitle()));
    message.addData(new WxMaSubscribeMessage.MsgData("thing4", content));
    message.addData(new WxMaSubscribeMessage.MsgData("date3", dtf.format(activity.getOverTime())));
    .......
    try {
        wxMaService.getMsgService().sendSubscribeMsg(message);
    } catch (WxErrorException e) {
        String msg = e.getMessage().substring(e.getMessage().indexOf("{"));
        log.info("【订阅消息失败】错误信息:"+msg);
    }
}

具体分析

  1. setToUser(openId):根据重数据库中查询出来的 openId 来判断此条订阅消息发送给谁
  2. 模板消息中的内容最多不能超出20个字,否则会报错,因此上面代码中有了一个字符串长度的判断。
  3. WxMaConstants.MiniProgramState.FORMAL 设置订阅消息发送后跳转的版本,版本一共有三种。1、DEVELOPER: 开发版本。2、TRIAL:体验版本。3、FORMAL:正式版本)
  4. message.setPage() 表示用户受到订阅消息之后点击跳转的页面。
  5. wxMaService.getMsgService().sendSubscribeMsg(message);将消息发送出去。

这是后端核心代码分析,将前期工作准备好之后,经历的步骤:存入队列信息—》监听取出队列信息----》发送订阅消息。相对来说,简单的订阅消息功能就很容易实现了。

此次是在项目中开发时从 0 到完成,学习的并不是特别深入,RabbitMQ 还有更多的细节去学习,目前只是达到了会简单的使用,接下来就是将 RabbitMQ 好好学习一下。

欢迎各位小伙伴学习交流!!!

最后

以上就是野性香菇为你收集整理的利用RabbitMQ发送微信小程序订阅消息一、前期准备二、相关配置三、代码实现思路的全部内容,希望文章能够帮你解决利用RabbitMQ发送微信小程序订阅消息一、前期准备二、相关配置三、代码实现思路所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部