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

如何從eureka獲取服務(wù)的ip和端口號進(jìn)行Http的調(diào)用

 更新時(shí)間:2022年03月09日 11:07:14   作者:長河  
這篇文章主要介紹了如何從eureka獲取服務(wù)的ip和端口號進(jìn)行Http的調(diào)用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

eureka獲取服務(wù)ip和端口號進(jìn)行Http調(diào)用

我告訴你們?yōu)樯段乙葟膃ureka首先獲取 goods的服務(wù)ip, 在用ip的方式使用http調(diào)用goods的服務(wù). 

因?yàn)楣镜囊?guī)定, 不讓我們用Feigin. 我TMD的都震驚了, 我都不知道為啥. 我也不想寫同事的ip地址, 做配置, 因?yàn)槎既ureka里面注冊了, 所以就這樣調(diào)用了, 真是蛋疼.  這種微服務(wù), 這種奇葩的方式.. 

package com.util;?
import com.alibaba.fastjson.JSON;
import com.curefun.attendance.appclient.vo.ApplyListVO;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.apache.commons.lang3.StringUtils;
?
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
?
/**
?* eureka的工具類
?*
?* @author zhangke
?* @time 2019年12月5日18:11:12
?*/
@Slf4j
public class EurekaUtil {
?
? ? /**
? ? ?* 解析eureka的返回?cái)?shù)據(jù)
? ? ?*/
? ? private static Pattern PATTERN_URL = Pattern.compile("<homePageUrl>(.+?)</homePageUrl>");
?
? ? /**
? ? ?* IP的緩存
? ? ?*/
? ? private static ConcurrentHashMap<String, List<String>> IP_CACHE = new ConcurrentHashMap<>();
?
? ? /**
? ? ?* 緩存的名字
? ? ?*/
? ? private final static String IP_NAME = "goodsIp";?
?
? ? /**
? ? ?* 獲取服務(wù)的所有地址(注冊在 eureka server 上的服務(wù))
? ? ?*
? ? ?* @param eurekaIp
? ? ?* @return
? ? ?*/
? ? public static List<String> getAllServiceAddr(String eurekaIp) {
? ? ? ? //先查詢緩存
? ? ? ? List<String> list = IP_CACHE.get(IP_NAME);
? ? ? ? if (list != null && list.size() > 0) {
? ? ? ? ? ? return list;
? ? ? ? }
? ? ? ? String serviceName = "GOODS";
? ? ? ? String url = eurekaIp + "apps/" + serviceName;
? ? ? ? OkHttpClient okHttpClient = new OkHttpClient().newBuilder().connectTimeout(2, TimeUnit.SECONDS).build();
? ? ? ? Request request = new Request.Builder()
? ? ? ? ? ? ? ? //請求接口 如果需要傳參拼接到接口后面
? ? ? ? ? ? ? ? .url(url)
? ? ? ? ? ? ? ? .addHeader("Content-Type", "application/json")
? ? ? ? ? ? ? ? .addHeader("Accept", "application/xml")
? ? ? ? ? ? ? ? .get()
? ? ? ? ? ? ? ? .build();
? ? ? ? Response response = null;
? ? ? ? List<String> result = new ArrayList<>();
? ? ? ? try {
? ? ? ? ? ? response = okHttpClient.newCall(request).execute();
? ? ? ? ? ? if (response.isSuccessful()) {
? ? ? ? ? ? ? ? String responseContent = response.body().string();
? ? ? ? ? ? ? ? Matcher matcher = PATTERN_URL.matcher(responseContent);
? ? ? ? ? ? ? ? while (matcher.find()) {
? ? ? ? ? ? ? ? ? ? String homepage = matcher.group(1).trim();
? ? ? ? ? ? ? ? ? ? result.add(homepage);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? log.error("從eureka中查詢GOODS的服務(wù)實(shí)例出錯(cuò)了.原因是 {}", e.getMessage());
? ? ? ? ? ? return result;
? ? ? ? }
? ? ? ? IP_CACHE.put(IP_NAME, result);
? ? ? ? return result;
? ? }?
?
? ? /**
? ? ?* GET請求獲取列表數(shù)據(jù), 同步請求
? ? ?*
? ? ?* @param ip
? ? ?* @param userId
? ? ?* @param state
? ? ?* @param pageNo
? ? ?* @param pageSize
? ? ?* @param key
? ? ?* @return
? ? ?*/
? ? public static List<ApplyListVO> getProductList(String ip, String userId, Integer state, Integer pageNo, Integer pageSize, String key) {
? ? ? ? if (StringUtils.isBlank(ip)) {
? ? ? ? ? ? return Collections.emptyList();
? ? ? ? }
? ? ? ? StringBuilder sb = new StringBuilder(ip);
? ? ? ? sb.append("goods/apply/getStuGoodsApplyList?user_id=").append(userId);
? ? ? ? sb.append("&state=").append(state).append("&pageNo=").append(pageNo);
? ? ? ? sb.append("&pageSize=").append(pageSize);
? ? ? ? if (StringUtils.isNotBlank(key)) {
? ? ? ? ? ? sb.append("&key=").append(key);
? ? ? ? }
? ? ? ? long millis = System.currentTimeMillis();
? ? ? ? Request request = new Request.Builder().url(sb.toString()).get().build();
? ? ? ? OkHttpClient okHttpClient = new OkHttpClient().newBuilder().connectTimeout(2, TimeUnit.SECONDS).build();
? ? ? ? try {
? ? ? ? ? ? Response response = okHttpClient.newCall(request).execute();
? ? ? ? ? ? if (response.isSuccessful()) {
? ? ? ? ? ? ? ? String string = response.body().string();
? ? ? ? ? ? ? ? //json的轉(zhuǎn)換.換成我需要的實(shí)體對象,為空的不返回null, 一個(gè)小技巧
? ? ? ? ? ? ? ? List<ApplyListVO> applyListVOS = JSON.parseArray(string, ApplyListVO.class);
? ? ? ? ? ? ? ? if (applyListVOS == null) {
? ? ? ? ? ? ? ? ? ? applyListVOS = Collections.emptyList();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? long millis2 = System.currentTimeMillis();
? ? ? ? ? ? ? ? log.info("從周X那里查詢到物資的列表,請求的url是:{},返回結(jié)果是:{}", sb.toString(), applyListVOS);
? ? ? ? ? ? ? ? log.info("查詢的耗時(shí)是(微秒):{}", (millis2 - millis));
? ? ? ? ? ? ? ? return applyListVOS;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? return Collections.emptyList();
? ? ? ? ? ? }
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? log.error("從周X的接口中查詢List信息出錯(cuò)了.原因是 {}", e.getMessage());
? ? ? ? ? ? return Collections.emptyList();
? ? ? ? }
? ? }?
}

這樣就可以很方便的調(diào)用了,

做微服務(wù)的一定要協(xié)調(diào)好各個(gè)組件的關(guān)系, 不然很容易兩個(gè)人要對不同的接口, 很麻煩.

對了, 現(xiàn)在我們的eureka 配置有個(gè)問題, 就是一個(gè)服務(wù)掛了之后, 需要很長的時(shí)間才能去掉. 然后請求到達(dá)網(wǎng)關(guān)之后還是去了已經(jīng)關(guān)閉的服務(wù), 就很蛋疼了. 需要配置一個(gè)參數(shù).

eureka:
? server: ? ?#配置屬性,但由于 Eureka 自我保護(hù)模式以及心跳周期長的原因,
? ? ? ? ? ? ?#經(jīng)常會遇到 Eureka Server 不剔除已關(guān)停的節(jié)點(diǎn)的問題
? ? enable-self-preservation: false # 設(shè)為false,關(guān)閉自我保護(hù)
? ? eviction-interval-timer-in-ms: 5000 # 清理間隔(單位毫秒,默認(rèn)是60*1000)啟用主動(dòng)失效,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #并且每次主動(dòng)失效檢測間隔為3s

先要關(guān)閉自我保護(hù) enable-self-preservation: false

eviction-interval-timer-in-ms 啟用主動(dòng)失效,并且每次主動(dòng)失效檢測間隔為5s

Eureka Server會定時(shí)(間隔值是eureka.server.eviction-interval-timer-in-ms,默認(rèn)值為0,默認(rèn)情況不刪除實(shí)例)進(jìn)行檢查,如果發(fā)現(xiàn)實(shí)例在在一定時(shí)間(此值由客戶端設(shè)置的eureka.instance.lease-expiration-duration-in-seconds定義,默認(rèn)值為90s)內(nèi)沒有收到心跳,則會注銷此實(shí)例。

現(xiàn)在的eureka的配置 已經(jīng)改過來了。 

eureka頁面中顯示ip+端口

eureka:
? instance:
? ? prefer-ip-address: true
? ? instance-id: ${spring.cloud.client.ip-address}:${server.port}
# spring.cloud.client.ip-address 為 2.x 版本,1.x 版本為 spring.cloud.client.ipAddress
# ${spring.cloud.client.ip-address} 這個(gè)值從 org.springframework.cloud.client.HostInfoEnvironmentPostProcessor 中獲取
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment,
?? ??? ?SpringApplication application) {
?? ?InetUtils.HostInfo hostInfo = getFirstNonLoopbackHostInfo(environment);
?? ?LinkedHashMap<String, Object> map = new LinkedHashMap<>();
?? ?map.put("spring.cloud.client.hostname", hostInfo.getHostname());
?? ?map.put("spring.cloud.client.ip-address", hostInfo.getIpAddress());
?? ?MapPropertySource propertySource = new MapPropertySource(
?? ??? ??? ?"springCloudClientHostInfo", map);
?? ?environment.getPropertySources().addLast(propertySource);
}

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

相關(guān)文章

  • Java中關(guān)于二叉樹層序遍歷深入了解

    Java中關(guān)于二叉樹層序遍歷深入了解

    二叉樹的層序遍歷是面試經(jīng)常會被考察的知識點(diǎn),甚至要求當(dāng)場寫出實(shí)現(xiàn)過程。層序遍歷所要解決的問題很好理解,就是按二叉樹從上到下,從左到右依次打印每個(gè)節(jié)點(diǎn)中存儲的數(shù)據(jù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • SpringCloud中的Consul詳解

    SpringCloud中的Consul詳解

    這篇文章主要介紹了SpringCloud中的Consul知識,本文使用的是docker-compose方式管理consul服務(wù),直接啟動(dòng)即可,需要的朋友可以參考下
    2022-03-03
  • 淺談MyBatis執(zhí)行SQL的兩種方式

    淺談MyBatis執(zhí)行SQL的兩種方式

    本文介紹MyBatis執(zhí)行SQL語句的2種方式,主要是SqlSession和Mapper接口以及它們的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-08-08
  • IntelliJ IDEA 2021.1 首個(gè) Beta 版本發(fā)布

    IntelliJ IDEA 2021.1 首個(gè) Beta 版本發(fā)布

    這篇文章主要介紹了IntelliJ IDEA 2021.1 首個(gè) Beta 版本發(fā)布,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java設(shè)計(jì)模式之狀態(tài)模式(State模式)介紹

    Java設(shè)計(jì)模式之狀態(tài)模式(State模式)介紹

    這篇文章主要介紹了Java設(shè)計(jì)模式之狀態(tài)模式(State模式)介紹,本文講解了何時(shí)使用狀態(tài)模式、如何使用狀態(tài)模式等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • 使用java實(shí)現(xiàn)BBS論壇發(fā)送郵件過程詳解

    使用java實(shí)現(xiàn)BBS論壇發(fā)送郵件過程詳解

    這篇文章主要介紹了使用java發(fā)送郵件過程詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Java下Struts框架中的ActionForm類詳解

    Java下Struts框架中的ActionForm類詳解

    這篇文章主要介紹了Java下Struts框架中的ActionForm類詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 詳解Java的回調(diào)機(jī)制

    詳解Java的回調(diào)機(jī)制

    最近學(xué)習(xí)java,接觸到了回調(diào)機(jī)制(CallBack)。初識時(shí)感覺比較混亂,而且在網(wǎng)上搜索到的相關(guān)的講解,本文介紹了Java的回調(diào)機(jī)制,有興趣的同學(xué)可以了解一下
    2016-10-10
  • SpringBoot如何整合nacos詳解

    SpringBoot如何整合nacos詳解

    今天教各位小伙伴SpringBoot是如何整合nacos的,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)Java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-06-06
  • java與C 代碼運(yùn)行效率的對比(整理)

    java與C 代碼運(yùn)行效率的對比(整理)

    最近和朋友無意間討論起了 有關(guān)java 和C 的 效率問題, (我是java 推介者, 他是 c 語言推介者, 他做的是嵌入式)故,想通過網(wǎng)絡(luò)查詢一下, 總結(jié)一下,兩者到底效率如何,其有何差異,原因又是啥?各種優(yōu)勢有在何處?
    2021-04-04

最新評論

新安县| 海城市| 小金县| 磴口县| 高台县| 托克托县| 玉溪市| 易门县| 甘谷县| 社旗县| 延川县| 乌鲁木齐市| 米脂县| 余江县| 江永县| 荣成市| 治县。| 平果县| 托克逊县| 霍林郭勒市| 商河县| 甘泉县| 宾阳县| 芜湖市| 江山市| 保德县| 罗定市| 辽源市| 宜兰市| 西吉县| 北安市| 剑川县| 五大连池市| 正蓝旗| 安庆市| 精河县| 辽阳县| 遵义市| 绥滨县| 日照市| 博兴县|