最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springcloud本地調(diào)試feign調(diào)用出現(xiàn)的詭異404問(wèn)題及解決

 更新時(shí)間:2022年03月09日 11:59:41   作者:差不多程序員  
這篇文章主要介紹了springcloud本地調(diào)試feign調(diào)用出現(xiàn)的詭異404問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

本地調(diào)試feign調(diào)用出現(xiàn)的詭異404問(wèn)題

問(wèn)題產(chǎn)生

最近在給公司準(zhǔn)備做分布式事務(wù)框架seata的調(diào)研,準(zhǔn)備搭建一套demo,根據(jù)阿里云官網(wǎng)的案例,我準(zhǔn)備搭建一套微服務(wù)架子,分別含有business、order、storage三個(gè)微服務(wù)組成,其中第一個(gè)微服務(wù)實(shí)現(xiàn)業(yè)務(wù)聚合,調(diào)用后面兩個(gè)微服務(wù),后面兩個(gè)微服務(wù)只需要暴露接口,操作相關(guān)的數(shù)據(jù)庫(kù),我再利用seata來(lái)做分布式的場(chǎng)景演示!

技術(shù)框架

SpringCloud eureka mybatis-plus feign ribbon seata

核心代碼

business調(diào)用方,在一個(gè)接口中通過(guò)feign調(diào)用其他2個(gè)服務(wù)

package com.blue.seata.business.service;
import com.blue.seata.order.api.remote.RemoteOrderService;
import com.blue.seata.storage.api.remote.RemoteStorageService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * @author liulei
 * @version 1.0
 */
@Service
public class BusinessService {
    private static final Logger logger = LoggerFactory.getLogger(BusinessService.class);
    @Autowired
    RemoteOrderService orderService;
    @Autowired
    RemoteStorageService storageService;
    public boolean buy(String userId, String code, Integer count) throws InterruptedException {
        logger.info("用戶購(gòu)買商品[{}],[{}]", code, count);
        orderService.create(userId, code, count);
        logger.info("調(diào)用訂單中心服務(wù)成功");
        Thread.sleep(2000);
        storageService.minus(code, count);
        logger.info("調(diào)用庫(kù)存中心服務(wù)成功");
        return true;
    }
}

Eureka客戶端配置,我使用的是網(wǎng)上公益注冊(cè)中心

eureka:
  instance:
    prefer-ip-address: true #以IP地址注冊(cè)到服務(wù)中心,相互注冊(cè)使用IP地址
  client:
    service-url:
      defaultZone: http://eurekdsa.springclouddsds.cn/edsdureka/
    registry-fetch-interval-seconds: 5

詭異的404

問(wèn)題描述:在保證Feign接口暴露的配置沒有錯(cuò)誤的前提下【一定沒問(wèn)題】,我使用postman調(diào)用business的測(cè)試接口,第一次調(diào)用成功,但是再點(diǎn)擊同樣的接口,出現(xiàn)了以下報(bào)錯(cuò),我貼一下postman

第一次:

第二次:

心態(tài)

很絕望,但是沒辦法,還是得埋頭進(jìn)去看看是哪個(gè)錯(cuò)誤,看控制臺(tái)的錯(cuò)誤提示,發(fā)現(xiàn)這個(gè)地方對(duì)于服務(wù)最終解析的URL與我預(yù)期有出入

business中,第二次再調(diào)用接口的時(shí)候出現(xiàn)的,為什么是個(gè)問(wèn)題,我解釋一下,我的business端口是6000,order端口是7000,storage是8000,大家反應(yīng)過(guò)來(lái)沒有,這塊解析出來(lái)的order接口調(diào)用怎么都不應(yīng)該是8000的端口,很明顯,解析出了問(wèn)題,也就是說(shuō)Feign解析出問(wèn)題了,再往下想,F(xiàn)eign的組成由Ribbon+HttpClient組成,即服務(wù)路由+http訪問(wèn)兩部分組件組成,這樣,我就基本可以確定,Ribbon的配置,出了問(wèn)題,很遺憾我自己沒有解決,而且花費(fèi)了大量時(shí)間去查詢資料,但是沒有一個(gè)匹配上,大多說(shuō)的都是常規(guī)配置,比如context-path,和consume、produce等格式配置的問(wèn)題,最后問(wèn)了一個(gè)小伙伴,他就調(diào)整了我business服務(wù)一個(gè)地方的代碼,看圖

小結(jié):

我到現(xiàn)在都不知道@RibbonClient這個(gè)注解,小伙伴解釋說(shuō)這是服務(wù)級(jí)別的負(fù)載均衡,而注入Bean的方式的負(fù)載是全局負(fù)載,這可能和我本地的調(diào)試環(huán)境有關(guān)系,我再描述一下我的測(cè)試環(huán)境:

1.本地三個(gè)服務(wù),基本上代碼都一樣,使用同一個(gè)Eureka注冊(cè)中心

2.Ribbon和Feign的代碼符合日常咱們開發(fā)所見的代碼

3.自己近期狀態(tài)不好,過(guò)分相信百度,各種嘗試,發(fā)現(xiàn)問(wèn)題定位的太晚,找到問(wèn)題也不知道如何去描述,尷尬

4.關(guān)于這一塊的解釋,我后續(xù)需要翻閱資料才能給出,抱歉啦!

springcloud在本地調(diào)試的踩坑記錄

1、在本地調(diào)試的時(shí)候

可以專門配置一個(gè)application-local.yml。這個(gè)yml只在本地調(diào)試的時(shí)候使用。我覺得這個(gè)還是很有必要的,可以只在本地保存,不提交到Git。

2、修改配置文件中關(guān)于eureka的配置

之前自己一直沒有注意到這個(gè)問(wèn)題,導(dǎo)致在服務(wù)本地運(yùn)行起來(lái)之后,一直不能再eureka的控制臺(tái)看到本地的服務(wù)。后來(lái)才注意到時(shí)自己沒有修改eureka中關(guān)于instance_id的配置。由于運(yùn)行了兩個(gè)相同id的服務(wù),所以會(huì)沖突。解決的辦法可以在eureka的instant_id的配置后面添加:{random.value},通過(guò)添加隨機(jī)數(shù)使得服務(wù)可以注冊(cè)兩次。

3、還是關(guān)于eureka的配置

在本地服務(wù)調(diào)用其他服務(wù)的時(shí)候,我發(fā)現(xiàn)一直是報(bào)超時(shí)的??戳撕笈_(tái)服務(wù)的運(yùn)行情況,用postman試一試,用swagger試一試,結(jié)果都沒有超時(shí),我一度以為是我的網(wǎng)絡(luò)有問(wèn)題。后來(lái)突然想到服務(wù)的eureka配置。

我們的配置文件是這樣的:

prefer-ip-address: true
ip-address: 1**.***.***.49 # 訪問(wèn)的路徑變?yōu)镮P地址

上面代碼中的ip是阿里云的內(nèi)網(wǎng)地址,外部是無(wú)法直接訪問(wèn)的,于是我把第二行代碼注釋掉,換成相應(yīng)的外網(wǎng)地址。問(wèn)題就這樣解決了。 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

商水县| 德庆县| 丹寨县| 开鲁县| 红原县| 南安市| 沙坪坝区| 临潭县| 塔河县| 唐河县| 蒙自县| 太仆寺旗| 叙永县| 阿克苏市| 洛川县| 北流市| 安平县| 平顶山市| 古蔺县| 三门县| 怀化市| 怀来县| 同心县| 武胜县| 原阳县| 新昌县| 朝阳市| 永年县| 海安县| 德兴市| 大庆市| 凤庆县| 封丘县| 兰溪市| 荥经县| 抚松县| 宜州市| 唐海县| 潜山县| 东兰县| 子长县|