Nepxion discovery的一些使用


   最近在接入全鏈路灰度的測試,調研了nepxion discovery,研究了下nepxion discovery怎么接入的問題,在這里記錄下心得。

   https://github.com/Nepxion/Discovery

   無需介紹,只要想做spring cloud灰度發布,肯定都會調研過這個神器,目測也有很多使用心得,這里只說一些自己接入的感受。

   1. 如果需要灰度,Nepxion discovery還是需要開發擼一些代碼作為灰度規則的,也需要自己手動擼一些代碼的,包括流量判斷,環境判斷,標記判斷,版本判斷等灰度發布的策略支持。

 在impl里,需要手動實現攔截器,進行攔截,舉例如下:

   如果我需要根據版本灰度,我需要實現以下攔截器:

   

public class MyDiscoveryEnabledStrategy extends DefaultDiscoveryEnabledStrategy {
private static final Logger LOG = LoggerFactory.getLogger(MyDiscoveryEnabledStrategy.class);

// 對REST調用傳來的Header參數(例如:mobile)做策略
@Override
public boolean apply(Server server) {
String mobile = strategyContextHolder.getHeader("mobile");
String serviceId = pluginAdapter.getServerServiceId(server);
String version = pluginAdapter.getServerVersion(server);
String region = pluginAdapter.getServerRegion(server);
String environment = pluginAdapter.getServerEnvironment(server);
String address = server.getHostPort();

LOG.info("負載均衡用戶定制觸發:mobile={}, serviceId={}, version={}, region={}, env={}, address={}", mobile, serviceId, version, region, environment, address);

if (StringUtils.isNotEmpty(mobile)) {
// 手機號以移動138開頭,路由到1.0版本的服務上
if (mobile.startsWith("138") && StringUtils.equals(version, "1.0")) {
return true;
// 手機號以聯通133開頭,路由到2.0版本的服務上
} else if (mobile.startsWith("133") && StringUtils.equals(version, "1.1")) {
return true;
} else {
// 其它情況,直接拒絕請求
return false;
}
}

return true;
}
}

   在這里,灰度版本是1.1,常規版本是1.0,也就是說,根據header的值來進行路由,到底是選擇常規版本還是灰度版本。

   這是使用discovery在我們的demo項目上增加的filter。

   在壓測中出現過一個問題,nepxion集成了zuul,在引用了nepxion的jar包后,需要自定義semaphore.maxSemaphores,否則,壓測達到1k+並發的時候,就會觸發我們的熔斷了。


免責聲明!

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



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