微服务架构【SpringBoot+SpringCloud+VUE】四 || 实战项目-微信服务
本教程实战项目主要基于微信公众号的开发讲解微服务的实战开发,整个过程中会讲解如何拆分微服务,以及各微服务组件在实战项目中的应用。
首先,我们创建一个springboot项目,为了后期各服务间的RPC调用,我们把整个项目拆分为三个子工程。XXX-service为服务的业务实现,同样遵循MVC架构,XXX-model为RPC调用接口的实体类,XXX-feign为RPC调用接口,下面的项目中会详细介绍这样拆分为三个子工程的目的。
1、创建父工程open-weixin
父工程仅做版本的统一依赖,项目依赖包根据项目需求进行引入,切记把以前项目的所有依赖都引入,避免引入过多无用包,以及包冲突。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modules>
<module>weixin-service</module>
<module>weixin-model</module>
<module>weixin-feign</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.kevin</groupId>
<artifactId>open-weixin</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.test.skip>true</maven.test.skip>
<!-- spring -->
<spring-cloud.version>Hoxton.SR5</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
<!--projects-->
<commons-beanutils.version>1.9.4</commons-beanutils.version>
<hutool-all.version>4.6.5</hutool-all.version>
<mybatis-plus.version>3.3.2</mybatis-plus.version>
</properties>
<dependencyManagement>
<dependencies>
<!--spring cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--工具类-->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${commons-beanutils.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool-all.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2、创建子工程weixin-service
weixin-service子工程为一个springboot项目,所以我们创建一个springboot子工程。创建其余两个子工程的目的主要要分离RPC调用接口;该项目基于微信公众号开发,所以需要引入微信公众号的一个开源框架,本教程使用的是weixin-java-mp,当然也有其他优秀的开源框架,根据自己需求选用。
2.1、项目依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.kevin</groupId>
<artifactId>open-weixin</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>weixin-service</artifactId>
<dependencies>
<!--spring boot web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--微信公众号框架-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>${weixin-java-mp.version}</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.github.jedis-lock</groupId>
<artifactId>jedis-lock</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
目前,我们仅需要接入微信公众号端,所以引入了mp的包,mp框架demo需要redis,相关依赖也需要引入,以上依赖包已经能满足我们目前的需求,后续根据项目的需求逐渐增加,再次提醒大家,切记一次性引入所有常用的包。
2.2、微信公众号初识
如果没有微信公众号开发经验的同学可以先看一下微信公众号官方文档,了解微信公众号开发流程。了解完之后我们基于mp的demo快速上手,下载mp框架demo,下载之后,我们把demo复制到我们的weixin-service项目中。复制后目录结构如下:
2.3、微信公众号参数申请
登陆微信公众号开发平台,找到开发者工具
进入公众平台测试账号
获取自己测试账号的appId、appsecret,URL为回调地址,需要外网可以访问(使用外网映射工具生成)、Token值自己输入
至此,微信公众号测试参数申请完成,下面进行公众号的接入。
2.4、参数配置
上节我们获取到微信公众号参数,接下来把获取的参数配置到项目的application.yml配置文件中,需要替换为自己的appId、secret、token配置内容如下:
logging:
level:
root: warn
com.kevin.weixin.service: info
com.kevin.weixin.service.repository: debug
org.springframework.web: INFO
com.kevin.weixin.service.wx.map: DEBUG
me.chanjar.weixin: DEBUG
wx:
mp:
useRedis: false
redisConfig:
host: 127.0.0.1
port: 6379
configs:
- appId: wx11111111
secret: 11111111
token: kevin
aesKey:
2.5、外网映射
下载一个外网映射工具,把我们本地的项目映射到外网地址,如下图所示,我本地项目的9005端口已经被映射到了yn.free.qydev.com域名
2.6、微信公众号服务端接入
启动项目,并将项目中WxPortalController的接口填入到微信公众平台的URL中,如图所示:
点击提交时,微信端会调用URL地址,进行服务端的验证,服务端会打印出如下日志:
接收到来自微信服务器的认证消息:[ff64816b307eec715166cca735cbddd035a80f3b, 1598194834, 1720798230, 7056734206944775639]
公众平台提交会提示配置成功信息,至此,微信公众号已成功接入我们自己的服务端。