springboot+activemq实现公众号消息推送

包:

<dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>
        <dependency>
            <groupId>org.messaginghub</groupId>
            <artifactId>pooled-jms</artifactId>
        </dependency>

配置文件:

# 连接地址 默认连接端口为 61616
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.packages.trusted=com.activemq.bean,java.lang
spring.activemq.pool.enabled=true
spring.activemq.pool.max-connections=50
spring.jms.pub-sub-domain=true
spring.jms.template.default-destination=active.default.destination

主要代码如下:

微信公众号消息推送的封装:

package com.jch.mng.utils;

import com.jch.mng.constant.WeChatConstants;
import com.jch.mng.enums.SendMessageEnum;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Created by xxs on 2021/7/19 14:07
 *
 * @Description 消息推送
 * @Version 2.9
 */
public class SendMessageUtil {

    private static Logger logger = LoggerFactory.getLogger(SendMessageUtil.class);

    public static boolean send(String openid ,String first,String parameter0 ,String parameter1 ,String parameter2,
                               String parameter3, String parameter4, String parameter5, String remark,String sendType) {
        if(!StrUtil.CheckNotNull(openid)) {
            logger.info("消息发送 openid 为空 消息类型 sendType : " + sendType);
            return false;
        }
        //
        SendMessageEnum e = SendMessageEnum.valueOf(sendType);
        String templateId = e.getTemplateId();
        logger.info("模板id为 : " + templateId);
        if(!StrUtil.CheckNotNull(templateId)) {
            return false;
        }
        boolean b = sendMessage(openid, templateId, first, parameter0,
                parameter1, parameter2, parameter3, parameter4, parameter5, remark, e.getUrl(),
                "#000000", "#000000", "#000000");
        System.out.println("发送" + b);
        return b;
    }

    public static boolean sendWithColor(String openid ,String first,String parameter1 ,String parameter2,
                               String parameter3, String parameter4, String parameter5, String remark,String sendType,
                               String firstcolor, String keywordcolor,String remarkcolor) {
        if(!StrUtil.CheckNotNull(openid)) {
            logger.info("消息发送 openid 为空 消息类型 sendType : " + sendType);
            return false;
        }
        //
        SendMessageEnum e = SendMessageEnum.valueOf(sendType);
        String templateId = e.getTemplateId();
        logger.info("模板id为 : " + templateId);
        if(!StrUtil.CheckNotNull(templateId)) {
            return false;
        }
        boolean b = sendMessage(openid, templateId, first, "",
                parameter1, parameter2, parameter3, parameter4, parameter5, remark, e.getUrl(),
                firstcolor, keywordcolor, remarkcolor);
        System.out.println("发送" + b);
        return b;
    }
    /**
    * @Author: xxs
    * @Param: [toUser, templateId, first, keyword0, keyword1, keyword2, keyword3, keyword4, keyword5, remark, url, firstColor, keywordColor, remarkColor]
    * @Date: 2021/7/19 17:58
    * @Description:  发送消息
    * @Version: 2.9
    */
    public static boolean sendMessage(String toUser ,String templateId,String first, String keyword0 ,String keyword1 ,
                            String keyword2 ,String keyword3, String keyword4, String keyword5,String remark,
                            String url, String firstColor, String keywordColor,String remarkColor) {
        WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
        wxStorage.setAppId(WeChatConstants.appId);  //appID
        wxStorage.setSecret(WeChatConstants.secret);//appsecretID
        WxMpService wxMpService = new WxMpServiceImpl();
        wxMpService.setWxMpConfigStorage(wxStorage);
        //数据
        List<WxMpTemplateData> data = new ArrayList<>();
        data.add(new WxMpTemplateData("first",first,firstColor));
        if(StrUtil.CheckNotNull(keyword0))
            data.add(new WxMpTemplateData("keyword0",keyword0,keywordColor));
        if(StrUtil.CheckNotNull(keyword1))
            data.add(new WxMpTemplateData("keyword1",keyword1,keywordColor));
        if(StrUtil.CheckNotNull(keyword2))
            data.add(new WxMpTemplateData("keyword2",keyword2,keywordColor));
        if(StrUtil.CheckNotNull(keyword3))
            data.add(new WxMpTemplateData("keyword3",keyword3,keywordColor));
        if(StrUtil.CheckNotNull(keyword4))
            data.add(new WxMpTemplateData("keyword4",keyword4,keywordColor));
        if(StrUtil.CheckNotNull(keyword5))
            data.add(new WxMpTemplateData("keyword5",keyword5,keywordColor));
        data.add(new WxMpTemplateData("remark",remark,remarkColor));
        //2,推送消息
        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                .toUser(toUser)//要推送的用户openid
                .data(data) //数据
                .templateId(templateId)//模版id
                .url(url)//点击模版消息要访问的网址*/
                .build();
        //发起推送
        try {
            String msg = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
            System.out.println("推送成功:" + msg);
            return true;
        } catch (Exception e) {
            System.out.println("推送失败:" + e.getMessage());
            e.printStackTrace();
        }
        return false;
    }


    
}

封装消息枚举:

package com.jch.mng.enums;

/**
 * Created by xxs on 2021/7/19 17:25
 *
 * @Description 封装消息枚举
 * @Version 2.9
 */
public enum SendMessageEnum {

    test("PBW_30SBgxtbxRR6mLjppazjb6UCvbk1lPnethk8lIw","https://www.baidu.com/")
    ;


    private SendMessageEnum( String templateId,String url) {
        this.url = url;
        this.templateId = templateId;
    }

    private String url;

    private String templateId;


    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getTemplateId() {
        return templateId;
    }

    public void setTemplateId(String templateId) {
        this.templateId = templateId;
    }
}

封装消息队列实体:

package com.jch.mng.entity;

/**
 * Created by xxs on 2021/7/20 9:48
 *
 * @Description 消息队列实体
 * @Version 2.9
 */
public class ActivityMQMessage {

    private String openid;
    private String parameter0;
    private String parameter1;
    private String parameter2;
    private String parameter3;
    private String parameter4;
    private String parameter5;
    private String sendType;

    private String firstColor;
    private String keywordColor;
    private String remarkColor;

    private String first;
    private String remark;
    private String url;
    private String templateId;

    private boolean useSend;
    private boolean useSendWithColor;
    private boolean useSendMessage;

    public ActivityMQMessage() {
        super();
    }
  
    /**
    * @Author: xxs
    * @param openid
     * @param parameter1
     * @param parameter2
     * @param parameter3
     * @param parameter4
     * @param parameter5
     * @param sendType
     * @param useSend
     * @param first
     * @param remark
    * @Date: 2021/7/20 11:56
    * @Description:  使用 SendMessageUtil.send()
    * @Version: 2.9
    * @Return:
    */
    public ActivityMQMessage(String openid, String parameter1, String parameter2, String parameter3,
                             String parameter4, String parameter5, String sendType, boolean useSend,
                             String first,String remark) {
        super();
        this.openid = openid;
        this.parameter1 = parameter1;
        this.parameter2 = parameter2;
        this.parameter3 = parameter3;
        this.parameter4 = parameter4;
        this.parameter5 = parameter5;
        this.sendType = sendType;
        this.useSend = useSend;
        this.first = first;
        this.remark = remark;
    }


    /**
    * @Author: xxs
    * @param openid
     * @param parameter1
     * @param parameter2
     * @param parameter3
     * @param parameter4
     * @param parameter5
     * @param sendType
     * @param useSendWithColor
     * @param first
     * @param remark
     * @param firstColor
     * @param keywordColor
     * @param remarkColor
    * @Date: 2021/7/20 11:55
    * @Description:  使用 SendMessageUtil.sendWithColor()
    * @Version: 2.9
    * @Return:
    */
    public ActivityMQMessage(String openid, String parameter1, String parameter2, String parameter3,
                             String parameter4, String parameter5, String sendType, boolean useSendWithColor,
                             String first,String remark,String firstColor, String keywordColor, String remarkColor) {
        super();
        this.openid = openid;
        this.parameter1 = parameter1;
        this.parameter2 = parameter2;
        this.parameter3 = parameter3;
        this.parameter4 = parameter4;
        this.parameter5 = parameter5;
        this.sendType = sendType;
        this.useSendWithColor = useSendWithColor;
        this.first = first;
        this.remark = remark;
        this.firstColor = firstColor;
        this.keywordColor = keywordColor;
        this.remarkColor = remarkColor;
    }


    /**
    * @Author: xxs
    * @param openid
     * @param templateId
     * @param parameter0
     * @param parameter1
     * @param parameter2
     * @param parameter3
     * @param parameter4
     * @param parameter5
     * @param useSendMessage 传true
     * @param firstColor 颜色十六进制
     * @param keywordColor 颜色十六进制
     * @param remarkColor 颜色十六进制
     * @param first 小标题
     * @param remark 备注
     * @param url 详情跳转url
    * @Date: 2021/7/20 11:50
    * @Description:  使用 SendMessageUtil.sendMessage()
    * @Version: 2.9
    * @Return: 
    */
    public ActivityMQMessage(String openid, String templateId, String parameter0, String parameter1, String parameter2,
                             String parameter3, String parameter4, String parameter5, boolean useSendMessage,
                             String firstColor, String keywordColor, String remarkColor, String first,
                             String remark, String url) {
        super();
        this.openid = openid;
        this.templateId = templateId;
        this.parameter0 = parameter0;
        this.parameter1 = parameter1;
        this.parameter2 = parameter2;
        this.parameter3 = parameter3;
        this.parameter4 = parameter4;
        this.parameter5 = parameter5;
        this.useSendMessage = useSendMessage;
        this.firstColor = firstColor;
        this.keywordColor = keywordColor;
        this.remarkColor = remarkColor;
        this.first = first;
        this.remark = remark;
        this.url = url;
    }

    /**
     * 获取 调用Send()方法的消息实体对象
     */
    public static ActivityMQMessage getSendObject(String openid, String parameter1, String parameter2, String parameter3,
                                                  String parameter4, String parameter5, String sendType,String first,String remark) {
        return new ActivityMQMessage(openid, parameter1, parameter2, parameter3,
                parameter4, parameter5, sendType, true, first, remark);
    }
    /**
     * 获取 调用SendWithColor()方法的消息实体对象
     */
    public static ActivityMQMessage getSendWithColorObject(String openid, String parameter1, String parameter2, String parameter3,
                                                           String parameter4, String parameter5, String sendType,String first,String remark,
                                                           String firstColor, String keywordColor, String remarkColor) {
        return new ActivityMQMessage(openid, parameter1, parameter2, parameter3, parameter4, parameter5,
                sendType, true, first, remark, firstColor, keywordColor, remarkColor);
    }
    /**
     * 获取 调用SendMessage()方法的消息实体对象
     */
    public static ActivityMQMessage getSendMessageObject(String openid, String templateId, String parameter0, String parameter1, String parameter2, String parameter3,
                                                         String parameter4, String parameter5,
                                                         String firstColor, String keywordColor, String remarkColor, String first,
                                                         String remark, String url) {
        return new ActivityMQMessage(openid, templateId, parameter0, parameter1, parameter2, parameter3,
                parameter4, parameter5,true, firstColor, keywordColor, remarkColor, first,remark, url);
    }


    public String getOpenid() {
        return openid;
    }

    public void setOpenid(String openid) {
        this.openid = openid;
    }

    public String getParameter0() {
        return parameter0;
    }

    public void setParameter0(String parameter0) {
        this.parameter0 = parameter0;
    }

    public String getParameter1() {
        return parameter1;
    }

    public void setParameter1(String parameter1) {
        this.parameter1 = parameter1;
    }

    public String getParameter2() {
        return parameter2;
    }

    public void setParameter2(String parameter2) {
        this.parameter2 = parameter2;
    }

    public String getParameter3() {
        return parameter3;
    }

    public void setParameter3(String parameter3) {
        this.parameter3 = parameter3;
    }

    public String getParameter4() {
        return parameter4;
    }

    public void setParameter4(String parameter4) {
        this.parameter4 = parameter4;
    }

    public String getParameter5() {
        return parameter5;
    }

    public void setParameter5(String parameter5) {
        this.parameter5 = parameter5;
    }

    public String getSendType() {
        return sendType;
    }

    public void setSendType(String sendType) {
        this.sendType = sendType;
    }

    public String getFirstColor() {
        return firstColor;
    }

    public void setFirstColor(String firstColor) {
        this.firstColor = firstColor;
    }

    public String getKeywordColor() {
        return keywordColor;
    }

    public void setKeywordColor(String keywordColor) {
        this.keywordColor = keywordColor;
    }

    public String getRemarkColor() {
        return remarkColor;
    }

    public void setRemarkColor(String remarkColor) {
        this.remarkColor = remarkColor;
    }

    public String getFirst() {
        return first;
    }

    public void setFirst(String first) {
        this.first = first;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getTemplateId() {
        return templateId;
    }

    public void setTemplateId(String templateId) {
        this.templateId = templateId;
    }

    public boolean isUseSend() {
        return useSend;
    }

    public void setUseSend(boolean useSend) {
        this.useSend = useSend;
    }

    public boolean isUseSendWithColor() {
        return useSendWithColor;
    }

    public void setUseSendWithColor(boolean useSendWithColor) {
        this.useSendWithColor = useSendWithColor;
    }

    public boolean isUseSendMessage() {
        return useSendMessage;
    }

    public void setUseSendMessage(boolean useSendMessage) {
        this.useSendMessage = useSendMessage;
    }

}

新建消息生产者:

package com.jch.mng.service;

/**
 * Created by xxs on 2021/7/20 11:06
 *
 * @Description 消息生产者
 * @Version 2.9
 */
public interface MessageProducersService {


    /**
     * 调用Send()方法 发送
     */
    void send(String openid, String parameter1, String parameter2, String parameter3, String parameter4,
              String parameter5, String sendType,String first,String remark);
    /**
     * 调用 SendWithColor()方法 发送
     */
    void sendWithColor(String openid, String parameter1, String parameter2, String parameter3, String parameter4,
                       String parameter5, String sendType, String first,String remark,String firstColor, String keywordColor, String remarkColor);
    /**
     * 调用SendMessage()方法 发送
     */
    void sendMessage(String openid, String templateId, String parameter0, String parameter1, String parameter2, String parameter3,
                     String parameter4, String parameter5, String firstColor, String keywordColor, String remarkColor, String first,
                     String remark, String url);
}

消息生产者具体实现:

package com.jch.mng.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.jch.mng.entity.ActivityMQMessage;
import com.jch.mng.service.MessageProducersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

/**
 * Created by xxs on 2021/7/20 11:06
 *
 * @Description 消息生产者具体实现
 * @Version 2.9
 */
@Service
public class MessageProducersServiceImpl implements MessageProducersService {


    @Autowired
    private JmsTemplate jmsTemplate = null;




    public void sendByJms(final ActivityMQMessage amq) {
//        jmsTemplate.send(new MessageCreator() {
//            public Message createMessage(Session session) throws JMSException {
//                return session.createTextMessage(JSONObject.toJSONString(amq));
//            }
//        });
        jmsTemplate.convertAndSend("test", JSONObject.toJSONString(amq));
    }

    @Override
    public void send(String openid, String parameter1, String parameter2, String parameter3, String parameter4, String parameter5, String sendType, String first, String remark) {
        ActivityMQMessage amq = ActivityMQMessage.getSendObject(openid, parameter1, parameter2, parameter3,
                parameter4, parameter5, sendType, first,remark);
        sendByJms(amq);
    }

    @Override
    public void sendWithColor(String openid, String parameter1, String parameter2, String parameter3, String parameter4, String parameter5, String sendType, String first, String remark, String firstColor, String keywordColor, String remarkColor) {
        ActivityMQMessage amq = ActivityMQMessage.getSendWithColorObject(openid, parameter1, parameter2, parameter3,
                parameter4, parameter5, sendType, first, remark, firstColor, keywordColor, remarkColor);
        sendByJms(amq);
    }

    @Override
    public void sendMessage(String openid, String templateId, String parameter0, String parameter1, String parameter2, String parameter3, String parameter4, String parameter5, String firstColor, String keywordColor, String remarkColor, String first, String remark, String url) {
        ActivityMQMessage amq = ActivityMQMessage.getSendMessageObject(openid, templateId, parameter0, parameter1, parameter2, parameter3,
                parameter4, parameter5, firstColor, keywordColor, remarkColor, first,remark, url);
        sendByJms(amq);
    }
}

新建消息监听:

package com.jch.mng.mq;

import com.alibaba.fastjson.JSONObject;
import com.jch.mng.entity.ActivityMQMessage;
import com.jch.mng.utils.SendMessageUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;

/**
 * Created by xxs on 2021/7/20 9:17
 *
 * @Description 消息监听
 * @Version 2.9
 */
@Component
public class MessageQueueListener  {


    private static Logger logger = LoggerFactory.getLogger(MessageQueueListener.class);

    @JmsListener(destination = "test")
    public void onMessage(Message message) throws JMSException {
        try {
            logger.info("监听到有消息要发送");
            TextMessage msg = (TextMessage) message;
            final String ms = msg.getText();
            //返回的消息
            logger.info(ms);
            ActivityMQMessage amq = JSONObject.parseObject(ms,ActivityMQMessage.class);
            send(amq);
        }catch (Exception e){
            logger.info("消息发送失败");
            e.printStackTrace();
        }
    }


    /**
    * @Author: xxs
    * @param amq
    * @Date: 2021/7/20 11:46
    * @Description:  发送消息
    * @Version: 2.9
    * @Return: void
    */
    public void send(ActivityMQMessage amq) {
        if(amq.isUseSend()) {
            logger.info("发送WX公众号消息UseSend() SendType : " + amq.getSendType());
            SendMessageUtil.send(amq.getOpenid(), amq.getFirst(), "",amq.getParameter1(), amq.getParameter2(), amq.getParameter3(),
                    amq.getParameter4(), amq.getParameter5(),amq.getRemark(), amq.getSendType());
        }else
        if(amq.isUseSendWithColor()) {
            logger.info("发送WX公众号消息UseSendWithColor() SendType : " + amq.getSendType());
            SendMessageUtil.sendWithColor(amq.getOpenid(),amq.getFirst(), amq.getParameter1(), amq.getParameter2(),
                    amq.getParameter3(), amq.getParameter4(), amq.getParameter5(), amq.getSendType(),amq.getRemark(),
                    amq.getFirstColor(), amq.getKeywordColor(), amq.getRemarkColor());
        }else
        if(amq.isUseSendMessage()) {
            logger.info("发送WX公众号消息UseSendMessage() Templateid : " + amq.getTemplateId());
            SendMessageUtil.sendMessage(amq.getOpenid(), amq.getTemplateId(), amq.getFirst(),
                    amq.getParameter0(), amq.getParameter1(), amq.getParameter2(),
                    amq.getParameter3(), amq.getParameter4(), amq.getParameter5(),
                    amq.getRemark(), amq.getUrl(), amq.getFirstColor(), amq.getKeywordColor(), amq.getRemarkColor());
        }
        logger.info("发送消息完成");
    }
}

新建测试方法:



/**
 * Created by xxs on 2021/7/17 10:00
 *
 * @Description 
 * @Version 2.9
 */
@RestController
@RequestMapping("/asService")
public class GzhAsServiceController {


    @Autowired
    private MessageProducersService messageProducersService;


    @PostMapping("/test")
    public String test(){
        messageProducersService.send("o871V6-cS0axKrimOo0BKbttFcAQ","000003","售后订单","",
                "","","test","当前订单设备已开始维修","如有疑问请联系我们,谢谢!");
        return "success";
    }

}

启动类如下:

 

开始测试:

控制台显示如下:

我的测试公众号收到推送:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值