<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>

          springCloud+consul優(yōu)雅停機(jī)

          共 3003字,需瀏覽 7分鐘

           ·

          2021-01-23 11:19

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          ? 作者?|? duanxz

          來(lái)源 |? urlify.cn/Ij2IBj

          76套java從入門(mén)到精通實(shí)戰(zhàn)課程分享

          之前的方案:先調(diào)用待更新的模塊的shutdown的Endpoint,這是springboot的功能實(shí)現(xiàn),consul上可見(jiàn)服務(wù)確實(shí)下線了,再kill掉進(jìn)程。但是還會(huì)有一些請(qǐng)求被轉(zhuǎn)發(fā)到該節(jié)點(diǎn)上,導(dǎo)致少量的錯(cuò)誤。

          總結(jié)的幾種:

          1、直接kill方式關(guān)閉服務(wù)進(jìn)程

          2、向注冊(cè)中心發(fā)送取消注冊(cè)命令

          3、發(fā)指令給注冊(cè)中心,改變指定微服務(wù)的服務(wù)狀態(tài)

          4、客戶端主動(dòng)通知注冊(cè)中心下線

          5、設(shè)置指定模塊的服務(wù)的狀態(tài),可通過(guò)狀態(tài)變更來(lái)實(shí)現(xiàn)再eureka的上下線

          ?

          1、直接kill方式關(guān)閉服務(wù)進(jìn)程

          kill -9 沒(méi)有善后

          kill -15? 有善后 會(huì)發(fā)送down狀態(tài)到eureka server

          kill java進(jìn)程【不建議】

          這種方式簡(jiǎn)單粗暴,直接造成的影響就是部分模塊調(diào)用時(shí)出錯(cuò),如果有多臺(tái)服務(wù)器的話,一臺(tái)一臺(tái)地重啟還是可以的,前提是調(diào)用端得有自己的重試策略,比如使用Feign作為客戶端調(diào)用接口的話可以配置ribbon的重試策略,而且被調(diào)用方得做好冪等策略,防止重試調(diào)用時(shí)出現(xiàn)重復(fù)數(shù)據(jù)的問(wèn)題。

          ?

          2、向注冊(cè)中心發(fā)送取消注冊(cè)命令

          2.1、eureka

          向eureka 注冊(cè)中心發(fā)送delete 請(qǐng)求,只是取消注冊(cè)服務(wù), 當(dāng)發(fā)送心跳時(shí)還是會(huì)注冊(cè)到eureka

          格式為? ?eureka地址/eureka/apps/服務(wù)名稱/實(shí)例名稱

          請(qǐng)求方式為delete

          下面是取消注冊(cè)一個(gè)服務(wù)的例子。

          ?

          ??下圖是用postman 發(fā)送delete請(qǐng)求

          ?

          2.2、consul

          PUT 請(qǐng)求

          http://10.200.110.100:8500/v1/agent/service/deregister/tag-10-200-110-100-8778

          參考《consul之:常用API接口》

          3、發(fā)指令給注冊(cè)中心,改變指定微服務(wù)的服務(wù)狀態(tài)

          3.1、eureka

          通過(guò)eureka變更服務(wù)狀態(tài)的方式實(shí)現(xiàn)服務(wù)上下線,不會(huì)再發(fā)送心跳注冊(cè)到eureka server

          ?

          ?3.2、consul

          PUT方式:http://10.200.110.100:8500/v1/agent/service/maintenance/tag-10-200-110-100-8778?enable=true&reason=sprint40

          參考《consul之:常用API接口》

          執(zhí)行完成后,consul的控制臺(tái)如下:

          觀察/tag-10-200-110-100-8778的實(shí)時(shí)日志,看新請(qǐng)求進(jìn)來(lái)后,再停機(jī)

          ?

          4、客戶端主動(dòng)通知注冊(cè)中心下線

          4.1、eureka

          客戶端主動(dòng)通知注冊(cè)中心下線,下線后不會(huì)再注冊(cè)到eureka了

          如果你的eureka客戶端是是一個(gè)spring boot應(yīng)用,可以通過(guò)調(diào)用以下代碼通知注冊(cè)中心下線。

          import?org.springframework.web.bind.annotation.RequestMapping;
          import?org.springframework.web.bind.annotation.RequestMethod;
          import?org.springframework.web.bind.annotation.RestController;

          import?com.netflix.discovery.DiscoveryManager;
          import?com.shm.common.model.RespVO;
          import?com.shm.common.util.RespUtil;

          @RestController
          public?class?OfflineController?{


          ????@RequestMapping(value?=?"/offline",?method?=?RequestMethod.GET)
          ????public?RespVO?offLine(){
          ????????DiscoveryManager.getInstance().shutdownComponent();
          ????????return?RespUtil.success();
          ????}
          ????
          ????
          }

          4.2、consul

          ?

          5、設(shè)置指定模塊的服務(wù)的狀態(tài),可通過(guò)狀態(tài)變更來(lái)實(shí)現(xiàn)再eureka的上下線

          5.1、eureka

          設(shè)置服務(wù)的狀態(tài),可通過(guò)狀態(tài)變更來(lái)實(shí)現(xiàn)再eureka的上下線

          pom中加入

          actuator的包
          ???????
          ??????????org.springframework.boot
          ??????????spring-boot-starter-actuator
          ????????

          以上的方式都能實(shí)現(xiàn)服務(wù)的下線,但是有的時(shí)候只想要下線某個(gè)服務(wù),卻不需要發(fā)布,等待事情處理完成后上線此服務(wù),則以上方式就做不到了。這時(shí)可以通過(guò)設(shè)置微服務(wù)的狀態(tài)來(lái)完成此功能。項(xiàng)目中整合了actuator的話就非常簡(jiǎn)單了,在項(xiàng)目啟動(dòng)的時(shí)候可以看到控制臺(tái)的輸出:

          /actuator/service-registry 可以已Get的方式獲取當(dāng)前服務(wù)的狀態(tài),以Post的方式修改當(dāng)前服務(wù)狀態(tài),如將服務(wù)設(shè)置為Down狀態(tài),這樣其他微服務(wù)接收到此狀態(tài)后將不調(diào)用此服務(wù)。將order服務(wù)狀態(tài)設(shè)置為Down:

          ?

          看下執(zhí)行后的效果:

          等到流量都沒(méi)有進(jìn)來(lái)后,需要發(fā)布的話直接發(fā)布接口,不需要發(fā)布可以直接上線當(dāng)前服務(wù):

          這樣一個(gè)服務(wù)的上線和下線就優(yōu)雅的完成了,如果項(xiàng)目中沒(méi)有使用Actuator框架,可以模仿Actuator框架的實(shí)現(xiàn)方式,詳見(jiàn)類:ServiceRegistryEndpoint

          如果要再上線:

          5.2、consul

          shutdown

          springboot1.5版本

          首先配置:

          endpoints.shutdown.enabled:?true
          #endpoint.shutdown.enabled:?true
          endpoint.shutdown.sensitive:?false
          management.endpoints.web.exposure.include:?"shutdown"

          management.endpoint.shutdown.enabled=true
          management.endpoints.web.exposure.include=shutdown


          總結(jié)
          以上幾種方式都可以實(shí)現(xiàn)微服的下線,3和5的方式最為優(yōu)雅,可以主動(dòng)下線和上線,在沒(méi)有新流量進(jìn)來(lái)后可以隨時(shí)發(fā)布,這樣在也不用等到半夜12點(diǎn)發(fā)布了。?

          ?

          參考:

          https://www.cnblogs.com/shihaiming/p/11408684.html

          https://www.cnblogs.com/ql211lin/p/10854967.html

          https://blog.csdn.net/linxingliang/article/details/106645443







          粉絲福利:Java從入門(mén)到入土學(xué)習(xí)路線圖

          ??????

          ??長(zhǎng)按上方微信二維碼?2 秒


          感謝點(diǎn)贊支持下哈?


          瀏覽 59
          點(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>
                    老太太AV | 色婷婷五月天小说 | 日批视频大全 | 中文字幕亚洲乱伦 | 蜜桃视频久久一区免费观看入口 |