<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          微服務(wù)從代碼到k8s部署應(yīng)有盡有系列(六、訂單服務(wù))

          共 2748字,需瀏覽 6分鐘

           ·

          2022-03-10 20:06

          我們用一個(gè)系列來(lái)講解從需求到上線、從代碼到k8s部署、從日志到監(jiān)控等各個(gè)方面的微服務(wù)完整實(shí)踐。

          整個(gè)項(xiàng)目使用了go-zero開發(fā)的微服務(wù),基本包含了go-zero以及相關(guān)go-zero作者開發(fā)的一些中間件,所用到的技術(shù)棧基本是go-zero項(xiàng)目組的自研組件,基本是go-zero全家桶了。

          實(shí)戰(zhàn)項(xiàng)目地址:https://github.com/Mikaelemmmm/go-zero-looklook

          1、訂單服務(wù)業(yè)務(wù)架構(gòu)圖

          2、依賴關(guān)系

          order-api(訂單api)

          • order-rpc(訂單rpc)
          • payment-rpc(支付rpc)

          payment-rpc(支付rpc)

          • mqueue-rpc(消息隊(duì)列)

          order-rpc(訂單rpc)

          • mqueue-rpc(消息隊(duì)列)
          • travel-rpc(民宿r(nóng)pc)

          3、訂單舉例

          3.1 下訂單

          1、用戶在去瀏覽travel服務(wù)中的民宿homestay看中選擇日期之后要下單,調(diào)用下單api接口

          app/order/cmd/api/desc/order.api

          // 訂單模塊v1版本的接口
          @server(
          prefix: order/v1
          group: homestayOrder
          )
          service order {
          @doc "創(chuàng)建民宿訂單"
          @handler createHomestayOrder
          post /homestayOrder/createHomestayOrder (CreateHomestayOrderReq) returns (CreateHomestayOrderResp)

          .....
          }

          2、order-api中調(diào)用order-rpc

          3、rpc中校驗(yàn)條件創(chuàng)建訂單之后 ,會(huì)調(diào)用mqueue-rpc創(chuàng)建一個(gè)延遲關(guān)閉訂單的消息隊(duì)列

          4、mqueue-rpc 延遲隊(duì)列

          延遲隊(duì)列是用的asynq,asynq是基于redis的高性能隊(duì)列,同時(shí)支持消息隊(duì)列、定時(shí)隊(duì)列、固定周期隊(duì)列,但是我們這個(gè)項(xiàng)目為了演示go-zero官方的消息隊(duì)列g(shù)o-queue(go-queue是基于kafka的),所以消息隊(duì)列用的go-queue,延遲隊(duì)列、定時(shí)任務(wù)用asynq。這里注意,這里只是往延遲隊(duì)列添加延遲任務(wù),具體執(zhí)行不在這里,那我們?nèi)タ纯?0分鐘之后具體執(zhí)行的代碼,在app/order/cmd/mq

          5、延遲20分鐘執(zhí)行的任務(wù)隊(duì)列

          在app/order/cmd/mq,這里我要說(shuō)明一下,go-zero官方goctl支持生成的服務(wù)目前是api、rpc,目前暫時(shí)還沒(méi)有支持console、mq等,但是go-zero提供了ServiceGroup,方便我們管理我們自己任何的服務(wù),所以在mq中我是用了ServiceGroup管理了服務(wù),這也是官方推薦的使用方式,代碼如下:

          1)app/order/cmd/mq/order.go 首先我們看main.go

          func?main()?{
          ?flag.Parse()
          ?var?c?config.Config

          ?conf.MustLoad(*configFile,?&c)
          ?prometheus.StartAgent(c.Prometheus)

          ?serviceGroup?:=?service.NewServiceGroup()
          ?defer?serviceGroup.Stop()

          ?for?_,?mq?:=?range?listen.Mqs(c)?{
          ??serviceGroup.Add(mq)
          ?}
          ?serviceGroup.Start()
          }

          ServiceGroup 可以添加任何service進(jìn)去,但是如何成為一個(gè)service呢?那你就要實(shí)現(xiàn)兩個(gè)方法一個(gè)Starter、一個(gè)Stoper

          2)我們?cè)趍ain中可以看到循環(huán)listen.Mqs(c) ?,那我們看看listen.Mqs(c) 都有哪些

          我們不止要監(jiān)聽asynq的延遲隊(duì)列、定時(shí)隊(duì)列,后面我們還想監(jiān)聽go-queue的kafka消息隊(duì)列,在代碼上我們考慮不想把go-queue的kafka消息隊(duì)列跟asynq的延遲隊(duì)列、定時(shí)隊(duì)列放到一起去,所以這里做了個(gè)分類

          3)asyny的延遲消息隊(duì)列

          定義asynq

          定義路由

          具體實(shí)現(xiàn)邏輯(關(guān)閉訂單邏輯)

          所以我們啟動(dòng)這個(gè)order-mq的時(shí)候,asynq就會(huì)被加載、定義路由,當(dāng)我們之前添加的延遲隊(duì)列到了20分鐘,就會(huì)自動(dòng)執(zhí)行關(guān)閉訂單邏輯,如果訂單沒(méi)有被支付,這里就會(huì)關(guān)閉掉訂單,支付了就忽略掉了,這樣就可以不用使用定時(shí)任務(wù)輪訓(xùn)關(guān)閉訂單了,哈哈

          3.2 訂單列表

          沒(méi)啥邏輯,就是查出來(lái)顯示罷了,自己看一下就好了

          // 訂單模塊v1版本的接口
          @server(
          prefix: order/v1
          group: homestayOrder
          )
          service order {

          @doc "用戶訂單列表"
          @handler userHomestayOrderList
          post /homestayOrder/userHomestayOrderList (UserHomestayOrderListReq) returns (UserHomestayOrderListResp)

          }

          3.3 訂單明細(xì)

          沒(méi)啥邏輯,就是查出來(lái)顯示罷了,自己看一下就好了

          // 訂單模塊v1版本的接口
          @server(
          prefix: order/v1
          group: homestayOrder
          )
          service order {

          @doc "用戶訂單明細(xì)"
          @handler userHomestayOrderDetail
          post /homestayOrder/userHomestayOrderDetail (UserHomestayOrderDetailReq) returns (UserHomestayOrderDetailResp)
          }

          4、結(jié)尾

          下了訂單,當(dāng)然我們要支付了,那就看下一篇支付服務(wù)吧

          項(xiàng)目地址

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

          歡迎使用 go-zerostar 支持我們!



          推薦閱讀


          福利

          我為大家整理了一份從入門到進(jìn)階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進(jìn)階看什么。關(guān)注公眾號(hào) 「polarisxu」,回復(fù)?ebook?獲取;還可以回復(fù)「進(jìn)群」,和數(shù)萬(wàn) Gopher 交流學(xué)習(xí)。

          瀏覽 58
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91探花国产视频 | 露脸丨91丨九色露脸 | 青榴最新入口 | 黄网在线免费观看 | 人人看人人撸 |