他们用第四部来传授从市场需求到上架、从标识符到k8s布署、从笔记到监视等方方面面的微服务工程项目完备课堂教学。

整座工程项目采用了go-zero合作开发的微服务工程项目,基本上包涵了go-zero和有关go-zero译者合作开发的许多合作开发工具,所制到的控制技术栈基本上是go-zero证书工作的暗鞘模块,基本上是go-zero全家人桶了。

两栖作战工程项目门牌号:https://github.com/Mikaelemmmm/go-zero-looklook

1、缴付服务工程项目销售业务洼瓣

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图

2、倚赖亲密关系

payment-api(缴付api)

order-rpc(订货rpc)

payment-rpc(缴付rpc)

usercenter(采用者rpc)

payment-rpc(缴付rpc)

mqueue-rpc(最新消息堆栈)

order-rpc(订货rpc)

mqueue-rpc(最新消息堆栈)

travel-rpc

usercenter(采用者rpc)

identity-rpc(许可证书rpc)

3、QQ缴付总括

3.1 建立缴付后处理订货

1、采用者在他们这边建立完订货之后,要去QQ那边建立预缴付订货

app/payment/cmd/api/desc/payment.api

// 缴付服务工程项目v1版本的接口@server(prefix: payment/v1group: thirdPayment)service payment {@doc “第三方缴付:QQ缴付”@handler thirdPaymentwxPaypost /thirdPayment/thirdPaymentWxPay (ThirdPaymentWxPayReq) returns (ThirdPaymentWxPayResp)…}

app/payment/cmd/api/internal/logic/thirdPayment/thirdPaymentwxPayLogic.go

ThirdPaymentwxPay

见下图,他们建立QQ预缴付订货时候做了一次封装,因为他们平台后续缴付销售业务肯定不止民宿缴付订货,肯定还会有其他的,比如他们后续可以推出商城,推出课程等,所以在这里采用switch做了个销售业务分类,目前他们只有民宿订货,但是除了查询销售业务不一样,其他都一样,他们把一样的逻辑封装起来,所以他们继续看封装后的方法createWxPrePayOrder

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图1

app/payment/cmd/api/internal/logic/thirdPayment/thirdPaymentwxPayLogic.go

createWxPrePayOrder

这里是拿到采用者的登陆userId去换openid(这块他们之前注册登陆那里有小程序注册登陆,那时候获取了openid),然后调用paymentRpc中的CreatePayment建立他们本地的缴付流水单号,再通过调用QQsdk-> svc.NewWxPayClientV3(这里是我基于go-zero封装了一次,没啥难度都能看懂) ,

然后在QQ端建立了一个关联他们本地流水单号的预缴付订货,返回给前端,前端通过js发起请求即可

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图2

3.2 QQ缴付回调

当前端拿着他们给的QQ后处理订货发起缴付,采用者输入密码缴付成功后,QQ服务工程项目器会回调他们服务工程项目器,回调门牌号在他们配置中填写的

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图3

这个回调门牌号,一定要填写他们缴付api服务工程项目中的回调处理方法,也是如下图的接口,这样他们才能接收到QQ回调进来,他们才可以做后续处理。

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图4

QQ回调回来之后,他们要处理回调逻辑,他们要调用verifyAndUpdateState 将他们流水单号改为已缴付

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图5

他们来看看verifyAndUpdateState方法,他们要查询单号是否存在,比对回调回来的金额与建立时候金额是否一致更新流水单号即可。这里不用在校验签名了,前一步的sdk已经做了处理了

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图6

这里还要给前端写一个轮训接口,前端采用者缴付成功后前端不能以前端的QQ返回结果为准,要通过后端提供的接口轮训,判断这个流水单是否真的是后端返回缴付成功状态,如果这个接口返回成功才算成功,QQ前端返回的不能作为依据,因为QQ前端返回的不安全,一般合作开发都明白不知道的自己百度。

3.3 缴付成功发送小程序模版最新消息

他们缴付回调成功之后,会给采用者发送一个入驻码,去了商家那里要展示这个码,商家通过后台核对码,其实是美团的样子,他们去美团下单,美团会给你个码,采用者拿着这个码去入住或者消费等。

ok,回调成功,他们会调用pyamentRpc去修改当前流水单状态成功

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图7

他们来看看paymentRpc中做了什么,

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图8

前面是校验,核心做了两件事情,是更新状态,第二向最新消息堆栈发送了一条最新消息,他们看看最新消息堆栈中对应的标识符

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图9

可以看到他们采用了go-queue发送了一条kq最新消息到kafka,而不是asynq延迟最新消息,因为他们想让所有订阅了该缴付状态的销售业务都能收到此最新消息后做相应的处理,虽然目前他们只有一个地方监听做处理(发送小程序模版最新消息通知采用者缴付成功),所以这里是发了一条该缴付流水有关信息到kafka中,这里跟之前订货那里是一样的只是添加最新消息到堆栈,没有处理,那他们看看order-mq中怎么处理的。

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图10

前面order一节已经介绍了整座order-mq的运作机制,这里不再多说了,他们只说kq这里

当order-mq启动后,go-queue会监听kafka中的最新消息

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图11

他们再来看下具体实现 , 当前面缴付回调成功添加到kafka中时候,order-mq中kafka会接受最新消息,也是PaymentUpdateStatusMq.Consume会接收到kafka的最新消息,然后反序列化数据,传递给execService 执行具体销售业务,那execService中执行了什么呢?

可以看到下方红框内,一个是修改订货状态(非缴付状态,订货也有自己状态),一个是发最新消息(短信、QQ小程序模版最新消息)给采用者

app/order/cmd/mq/internal/mqs/kq/paymentUpdateStatus.go

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图12

修改订货状态的他们不看了,他们可以来看看发送小程序模版最新消息,下方LiveStateDate\LiveEndDate之前调试写死的,这个直接改成方法传递过来的时间好了,转换一下

【注】采用者想收到小程序模版最新消息,必须在前端让采用者许可才行,这是小程序必须的不是他们能控制的

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图13

这里发送最新消息他们也不是真正的调用QQsdk去发送最新消息,也是往最新消息堆栈MqueueRpc中插入模版最新消息(其实这里也可以直接发),然后由message最新消息服务工程项目从kafka中取出来真正发送,是想所有的短信、email、QQ等最新消息统一从这个服务工程项目发送出去,这个自己根据自己公司销售业务或者架构去灵活设计吧,不一定非得这样。

那他们说到这里了直接去看看message最新消息服务工程项目标识符吧

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图14

message销售业务中只有一个mq,因为他不需要rpc、api,只需要定时从堆栈去最新消息发送最新消息,所以它运行逻辑跟order-mq一样的,同样适用serviceGroup管理

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图15

他们不细说了,运行逻辑可以去看订货服务工程项目那一节的order-mq有细说,他们只看具体实现逻辑,go-queue从kafka堆栈中取出每一条要发送的QQ小程序模版最新消息数据,然后反序列化交给execService去处理,他们来看看execService

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图16

execService 主要是整合数据,通过小程序sdk的client 发送给小程序即可,这里有个注意点,小程序是可以区分环境的,是发送到线上小程序还是体验版小程序,在下方红色框内有做区分,实际这样是不安全的 通过这种方式,好搞到配置文件里,万一合作开发环境有人捣乱改成formal,随便发给别人openid出事了,这个自己可以改改哈

微服务项目从标识符到k8s布署一应俱全系列产品(七、缴付服务项目)插图17

4、小结

到这里基本上上整体工程项目服务工程项目逻辑都差不多说明完了,后续会介绍收集笔记、监视、布署等

工程项目门牌号

https://github.com/zeromicro/go-zero

欢迎采用go-zero并star支持他们!

QQ交流群

关注『微服务工程项目课堂教学』公众号并点击交流群获取社区群二维码。

作者 nasiapp

在线客服
官方客服
我们将24小时内回复。
12:01
您好,有任何疑问请与我们联系!

选择聊天工具: