您好,登錄后才能下訂單哦!
本篇內容介紹了“eureka中怎么把自己的服務打造的更加人性化”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
先來看下 eureka 的可視化界面如下。
我們知道,左側的服務名稱MICROSERVICE-ORDER 是在項目中通過配置文件指定的。右邊的信息是注冊到 eureka 的服務信息,但是通過這個信息,我們無法獲知具體的細節。我們首先要改的就是這個地方。
1. 給服務起個更順眼的名字
我先打個比方,還是上一節舉的例子,很多創業公司入住經濟開發區的寫字樓,那每個公司總得有名字吧,或者對外總得有一個合適的稱呼吧,你不能用一大長串公司代碼來指定該公司,這樣不僅不容易記住,更重要的是不好識別。
當有很多微服務注冊到 Eureka 時,如果有哪個服務壞掉了,我們希望是能夠很直觀的知道是哪個服務出了問題,這樣能更加快捷的定位問題。比如我們知道這是個訂單服務,端口號是 8001,那么如果我們直接顯示 “訂單服務-8001”,是不是更加直觀呢?答案是肯定的,我們在訂單服務的配置文件中,通過eureka.instance.instance-id 即可指定。如下:
2. 給服務指定一個正確的 IP
上面我們給服務指定了一個更順眼的名字,但是當我們把鼠標移到上面時,觀看左下角的 url 信息,如下:
可以看到,顯示的是:http://ifly-1741:8001/actuator/info,這不知道是啥啊。
這就好比說,我告訴你,你要想來了解我們公司的信息,你可以來 xxx 大樓8001層來了解。但是我根本就不知道 xxx 大樓的地址啊……
我們當然不希望出現這種情況,可讀性太低了,這里理論上應該是顯示該服務自身的 ip 才對,那么如何讓這里的 ip 顯示正常呢?
eureka 有個配置eureka.instance.prefer-ip-address,該配置默認為 false,我們需要把它設置為 true,這樣就能正常顯示 ip 地址了。
3. 給服務一個展示詳細信息頁面
做好了上面這一步之后,我們點擊“訂單服務-8001”這個鏈接,會訪問:
http://192.168.75.1:8001/actuator/info這個地址,這沒問題。但是發現會報404錯誤,說明并不能找到該服務的詳細信息。
這就好比說,我這公司的名字也起了,地址也給你了,你接下來就跟著高德地圖的導航來找我了,但是我的信息還沒有導入到高德地圖啊……也就是說,高德地圖還不能監視到我的信息,你當然找不到我了。那怎么辦呢?
我們看這個 url 里面有個 actuator,沒錯,Actuator 在 Spring Boot 中是用來監控的,我們在使用時需要導入這個依賴。
<!-- spring boot actuator 監控信息 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
但是光導入依賴還不行啊,就好比你去高德地圖注冊了賬號,但是你的詳細信息還得錄入到高德地圖的系統里啊。那怎么辦呢?
在導入了 actuator 依賴后,我們可以在配置文件中可以將這些服務的相關信息給初始化好,當用戶點擊上面的服務鏈接后,就可以以 json 的格式展示出來。比如:
# 用來展示項目的基本信息
info:
author.name: shengwu ni
app.name: microservice
server.port: ${server.port}
application.name: ${spring.application.name}
當點擊“訂單服務-8001”訪問 http://192.168.75.1:8001/actuator/info 時就會出現以下 json,即我們項目中配置的信息。
{
"author": {
"name": "shengwu ni"
},
"app": {
"name": "microservice"
},
"server": {
"port": "8001"
},
"application": {
"name": "microservice-order"
}
}
哎?這樣就比較友好了,我公司名字也有了,地址也給你了,在地圖上的信息也錄入了,接下來你就可以順利到我公司來參觀,來了解我司信息了。
4. 給別人一個了解你的機會
通過上面一些配置,這個服務的相關信息可以說比較友好了。但是還有個問題啊,我公司別名起好了,地址也有了,也錄入地圖里了,但是我怎么能讓外界知道這些信息呢?我得有個公司主頁吧,也就是說,得有個入口讓別人知道這些信息才行。
這就叫服務發現。我們都說 Eureka 服務注冊與發現,說到現在,我們一直在討論 Eureka 的服務注冊功能,讓服務注冊到 Eureka 中,我們可以在 Eureka 界面看到這些服務,但是如何被外界發現呢?我們需要暴露一個接口給外界,專門提供本服務的詳細信息。
如何提供呢?我們需要寫一個接口,暴露給外界調用,如下:
/**
* 訂單服務
* @author shengwu ni
*/
@RestController
@RequestMapping("/provider/order")
public class OrderProviderController {
@Resource
private EurekaClient client;
private static final Logger LOGGER = LoggerFactory.getLogger(OrderProviderController.class);
@GetMapping("/discovery")
public Object discovery() {
// 獲取Eureka中所有的服務節點
List<Application> applications = client.getApplications().getRegisteredApplications();
if (applications != null) {
for (Application application : applications) {
// 對外暴露的服務名稱
String name = application.getName();
// 只看訂單服務信息
if ("MICROSERVICE-ORDER".equals(name)) {
// 服務有多少個實例,比如訂單服務可能部署了多個,有多個訂單服務注冊到了eureka
List<InstanceInfo> instances = application.getInstances();
LOGGER.info("所有的訂單服務:{}", 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、端口、心跳情況等信息。直接將服務的信息返回即可。
這樣我們通過訪問該接口,通過返回的 json 可以很清楚的看到服務的詳細信息了。
“eureka中怎么把自己的服務打造的更加人性化”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。