SpringCloud Alibaba 开发微信公众号 (事件处理)

简介: SpringCloud Alibaba 开发微信公众号 (事件处理)

上篇讲了使用策略模式处理复杂的消息,除了消息类型在微信用户和公众号产生交互的过程中,用户的一些操作(如:点击、关注/取消关注、扫描带参数二维码、上报地理位置等)微信服务器回通过事件的形式进行通知到我们的开发服务器,而开发者可以在某些事件推送后进行相应的处理回复。本篇就讲事件如何处理。

根据各种事件类型,创建EventType枚举类,定义各种事件类型的枚举值,

/**
 * 事件类型枚举
 */
public enum EventType {
    /**
     * 关注
     */
    SUBSCRIBE,
    /**
     * 取消关注
     */
    UNSUBSCRIBE,
    /**
     * 用户已关注时的事件推送
     */
    SCAN,
    /**
     * 上报地理位置事件
     */
    LOCATION,
    /**
     * 自定义菜单事件(点击菜单拉取消息时的事件推送)
     */
    CLICK,
    /**
     * 点击菜单跳转链接时的事件推送
     */
    VIEW,
    /**
     * 推送模版消息
     */
    TEMPLATESENDJOBFINISH;
    /**
     * 根据名称获取事件类型枚举对象
     *
     * @param eventType 事件名称
     * @return
     */
    public static EventType eventType(String eventType) {
        for (EventType type : EventType.values()) {
            if (type.name().toLowerCase().equals(eventType.toLowerCase())) {
                return type;
            }
        }
        return CLICK;
    }
}
复制代码

创建事件接口Event,增加获取事件源、获取事件处理的数据、执行回调方法

import java.util.Map;
/**
 * 事件接口
 */
public interface Event {
    /**
     * 获取事件源
     *
     * @return
     */
    Object getSource();
    /**
     * 获取事件处理的数据
     *
     * @return
     */
    Map<String, Object> getMessage();
    /**
     * 执行回调
     *
     * @param message 回调消息
     * @return
     */
    String callback(String message);
}
复制代码

创建事件源接口EventSource

/**
 * 事件源接口
 */
public interface EventSource {
    /**
     * 增加事件监听器
     *
     * @param eventListener 事件监听
     */
    void addListener(EventListener eventListener);
    /**
     * 通知事件监听器
     */
    void notifyListener();
}
复制代码

创建事件监听接口EventListener

import com.ctsi.sddx.constants.EventType;
/**
 * 事件监听接口
 */
public interface EventListener {
    /**
     * 事件处理方法
     *
     * @param event 事件
     * @return
     */
    String handleEvent(Event event);
    /**
     * 获取事件类型
     *
     * @return
     */
    EventType getEvent();
}
复制代码

以关注事件为例子,创建关注事件处理类,当event是subscribe关注时文字回复“欢迎关注XXX公众号!!!”

import com.ctsi.sddx.bean.message.TextMessage;
import com.ctsi.sddx.constants.EventType;
import com.ctsi.sddx.event.Event;
import com.ctsi.sddx.event.EventListener;
import java.util.Map;
/**
 * @Author : lizzu
 * @create 2022/10/3 20:01
 * 关注事件处理类
 */
public class SubscribeListener implements EventListener {
    @Override
    public String handleEvent(Event event) {
        Map<String, Object> message = event.getMessage();
        String eventType = message.get("Event").toString();
        if (EventType.eventType(eventType) == EventType.SUBSCRIBE) {
            return TextMessage.ofSendMsg(message, "欢迎关注XXX公众号!!!").toXml();
        }
        return "success";
    }
    @Override
    public EventType getEvent() {
        return EventType.SUBSCRIBE;
    }
}
复制代码

事件源处理类

/**
 * 事件源接口
 */
public interface EventSource {
    /**
     * 增加事件监听器
     *
     * @param eventListener 事件监听
     */
    void addListener(EventListener eventListener);
    /**
     * 通知事件监听器
     */
    void notifyListener();
}
复制代码

事件消息处理service类EventMessageService 实现IMessage接口。

import cn.org.spring.wechar.event.MessageSource;
import cn.org.spring.wechar.event.listener.ClickListener;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
 * 事件消息处理service类
 */
@Service
public class EventMessageService implements IMessage {
    @Override
    public String handler(Map<String, Object> param) {
        MessageSource source = new MessageSource();
        //其他事件进行add处理即可
        source.addListener(new ClickListener());
        source.addListener(new SubscribeListener());        
        return source.setParam(param);
    }
}
复制代码

增加事件处理配置

import com.ctsi.sddx.constants.MessageType;
import com.ctsi.sddx.context.ContextMessageFactory;
import com.ctsi.sddx.service.message.EventMessageService;
import com.ctsi.sddx.service.message.ImageMessageService;
import com.ctsi.sddx.service.message.TextMessageService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @Author : lizzu
 * @create 2022/10/3 13:50
 * 消息配置类
 */
@Configuration
public class MessageConfig {
    private ApplicationContext applicationContext;
    public MessageConfig(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }
    @Bean
    public ContextMessageFactory getContextMessageFactory() {
        ContextMessageFactory contextMessageFactory = new ContextMessageFactory();
        contextMessageFactory.builder(MessageType.IMAGE, applicationContext.getBean(ImageMessageService.class))
                .builder(MessageType.TEXT, applicationContext.getBean(TextMessageService.class))
                .builder(MessageType.EVENT, applicationContext.getBean(EventMessageService.class));//增加事件处理
        return contextMessageFactory;
    }
}
复制代码

测试:

网络异常,图片无法展示
|

到此事件处理基本操作已经讲完,后面可以根据需要增加对应的事件监听操作即可。

下一篇:

模板消息管理


相关文章
|
6月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
7月前
|
人工智能 SpringCloudAlibaba 自然语言处理
SpringCloud Alibaba AI整合DeepSeek落地AI项目实战
在现代软件开发领域,微服务架构因其灵活性、可扩展性和模块化特性而受到广泛欢迎。微服务架构通过将大型应用程序拆分为多个小型、独立的服务,每个服务运行在其独立的进程中,服务与服务间通过轻量级通信机制(通常是HTTP API)进行通信。这种架构模式有助于提升系统的可维护性、可扩展性和开发效率。
2057 2
|
6月前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
105 0
|
7月前
|
小程序
微信小程序数据绑定与事件处理:打造动态交互体验
在上一篇中,我们学习了搭建微信小程序开发环境并创建“Hello World”页面。本文深入探讨数据绑定和事件处理机制,通过具体案例帮助你打造更具交互性的小程序。数据绑定使用双花括号`{{}}`语法,实现页面与逻辑层数据的动态关联;事件处理则通过`bind`或`catch`前缀响应用户操作。最后,通过一个简单的计数器案例,巩固所学知识。掌握这些核心技能,将助你开发更复杂的小程序。
|
8月前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
725 4
|
8月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
283 7
|
8月前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
1922 7
|
12月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
292 1
|
9月前
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
1165 8
【SpringCloud Alibaba系列】Dubbo高级特性篇

热门文章

最新文章