一、首頁顯示的微服務名
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、端口、心跳情況等信息。直接將服務的信息返回即可。