Eureka的細節(首頁顯示微服務名、外網訪問顯示正確ip、詳情信息、服務發現)


一、首頁顯示的微服務名

  Eureka 首頁顯示的微服務名默認為:機器主機名:應用名稱:應用端口,也就是:

${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id}:${server.port}

我們很難識別,自定義顯示名字

在application.yml配置文件中修改參數:

#eureka相關配置
eureka: instance: hostname: 127.0.0.1 (這里沒關系)
   #設置是否將自己作為客戶端注冊到注冊中心(缺省true)
   #這里為不需要,查看@EnableEurekaServer注解的源碼,會發現它間接用到了@EnableDiscoveryClient
  instance-id: userService-${spring.cloud.client.ipaddress}-${server.port} 

 二、給服務器一個正確的IP

  上面我們給服務指定了一個更順眼的名字,但是當我們把鼠標移到上面時,

顯示的是:http://localhost:8084/actuator/info

可讀性太低了,這里理論上應該是顯示該服務自身的 ip 才對,那么如何讓這里的 ip 顯示正常呢?

在application.yml配置文件中修改參數:

#服務信息顯示的真實的ip, 開發中一定要設置為true, 如果不設置, 其他電腦訪問不到你的服務
prefer-ip-address: true

 三、設置微服務的詳細信息

 但是默認情況下,是沒有微服務的信息的,它是一個空的

    顯示{}

在大型項目中,微服務可能會有成百上千個,如果你沒有填寫微服務的信息,否則你的項目維護會非常痛苦。

填寫微服務的信息

1、在你的微服務項目中添加actuator依賴,以及插件

<!-- 微服務的詳細信息 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
插件:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <delimiters>
                    <delimiter>$</delimiter>
                </delimiters>
            </configuration>
        </plugin>
    </plugins>
</build>

2、在項目的配置文件中,填寫該微服務的信息:

#服務的描述信息
info: app: name: helloServer-microcloud
  author: name: hhj
  build: artifactId: $project.artifactId$
    version: $project.version$
  company: name: www.zl.com
  server: port: ${server.port}

顯示:

四、服務發現

  通過上面一些配置,這個服務的相關信息可以說比較友好了。但是還有個問題啊,

我公司別名起好了,地址也有了,也錄入地圖里了,但是我怎么能讓外界知道這些信息呢?

我得有個公司主頁吧,也就是說,得有個入口讓別人知道這些信息才行。

我們需要暴露一個接口給外界,專門提供本服務的詳細信息。

寫一個接口,暴露給外界調用:

@RestController
@RequestMapping("/hello")
public class InfoController {
@Resource
private EurekaClient client;

private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);

@GetMapping("/discovery")
public Object discovery() {
    // 獲取Eureka中所有的服務節點
    List<Application> applications = client.getApplications().getRegisteredApplications();
    if (applications != null) {
        for (Application application : applications) {
            // 對外暴露的服務名稱
            String name = application.getName();
            // 只看hello服務信息
            if ("house-userService".equalsIgnoreCase(name)) {
                // 服務有多少個實例,比如訂單服務可能部署了多個,有多個訂單服務注冊到了eureka
                List<InstanceInfo> instances = application.getInstances();
                LOGGER.info("所有的hello服務:{}", instances);
                if (instances != null) {
                    for (InstanceInfo info : instances) {
                        LOGGER.info("服務id:{}", info.getInstanceId());
                        LOGGER.info("服務主機:{}", info.getHostName());
                        LOGGER.info("服務端口:{}", info.getPort());
                    }
                }
                return instances;
            }
        }
    }
    return null;
}
}

需要引入 EurekaClient 端,在接口內部,通過 EurekaClient 獲取到注冊在 Eureka 上的所有 Application,

這里的 application 其實就是我們常說的服務節點,從而獲取到服務節點的信息,

包括服務節點的名稱、狀態、IP、端口、心跳情況等信息。直接將服務的信息返回即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM