基於Zookeeper服務註冊和發現
1、專案的目錄結構
2、基於zk服務註冊和發現的架構圖
3、服務端(像zk提供服務的訪問地址)
package cn.zk.distribute; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; public class DistributedSystemServer { private ZooKeeper zk = null; private void getZkClient() throws Exception { // 伺服器在需求中並不需要做任何監聽 zk = new ZooKeeper(GlobalConstants.zkhosts, GlobalConstants.sessionTimeout, null); } /** * 向zookeeper中的/servers下建立子節點 * * @throws InterruptedException * @throws KeeperException */ private void connectZK(String serverName, String port) throws Exception { // 先創建出父節點 if (zk.exists(GlobalConstants.parentZnodePath, false) == null) { zk.create(GlobalConstants.parentZnodePath, null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } // 連線zk建立znode zk.create(GlobalConstants.parentZnodePath + "/", (serverName + ":" + port).getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL); System.out.println("server " + serverName + " is online ......"); } // 伺服器的具體業務處理功能 private void handle(String serverName) throws Exception { System.out.println("server " + serverName + " is waiting for task process......"); Thread.sleep(Long.MAX_VALUE); } public static void main(String[] args) throws Exception { DistributedSystemServer server = new DistributedSystemServer(); // 獲取與zookeeper通訊的客戶端連線 server.getZkClient(); // 一啟動就去zookeeper上註冊伺服器資訊,引數1: 伺服器的主機名 引數2:伺服器的監聽埠 server.connectZK(args[0], args[1]); // 進入業務邏輯處理流程 server.handle(args[0]); } }
2、客戶端(獲取zk提供的服務地址,並呼叫服務)
package cn.zk.distribute; import java.util.ArrayList; import java.util.List; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.Watcher.Event.EventType; public class DistributedSystemClient { private volatile List<String> servers = null; private ZooKeeper zk = null; // 獲取zk連線 private void getZkClient() throws Exception { // 伺服器在需求中並不需要做任何監聽 zk = new ZooKeeper(GlobalConstants.zkhosts, GlobalConstants.sessionTimeout, new Watcher() { @Override public void process(WatchedEvent event) { if (event.getType() == EventType.None) return; try { // 獲取新的伺服器列表,重新註冊監聽 updateServers(); } catch (Exception e) { e.printStackTrace(); } } }); } /** * 從zk中獲取線上伺服器資訊 */ public void updateServers() throws Exception { // 從servers父節點下獲取到所有子節點,並註冊監聽 List<String> children = zk.getChildren(GlobalConstants.parentZnodePath, true); ArrayList<String> serverList = new ArrayList<String>(); for (String child : children) { byte[] data = zk.getData(GlobalConstants.parentZnodePath + "/" + child, false, null); serverList.add(new String(data)); } // 如果客戶端是一個多執行緒程式,而且各個執行緒都會競爭訪問servers列表,所以,在成員中用volatile修飾了一個servers變數 // 而在更新伺服器資訊的這個方法中,是用一個臨時List變數來進行更新 servers = serverList; // 將更新之後的伺服器列表資訊列印在控制檯觀察一下 for (String server : serverList) { System.out.println(server); } System.out.println("==================="); } /** * 業務邏輯 * * @throws InterruptedException */ private void requestService() throws InterruptedException { Thread.sleep(Long.MAX_VALUE); } public static void main(String[] args) throws Exception { DistributedSystemClient client = new DistributedSystemClient(); // 先構造一個zk的連線 client.getZkClient(); // 獲取伺服器列表 client.updateServers(); // 客戶端進入業務流程,請求伺服器的服務 client.requestService(); } }
3、用到的常量配置資訊
package cn.zk.distribute;
public class GlobalConstants {
// zk伺服器列表
public static final String zkhosts = "192.168.2.118:2181";
// 連線的超時時間
public static final int sessionTimeout = 2000;
// 服務在zk下的路徑
public static final String parentZnodePath = "/servers";
}
4、將服務端,匯出為可以執行的jar檔案
jar的執行
[[email protected] Desktop]# java -jar server.jar 192.168.2.11 4567
5、將客戶端,匯出為可以執行的jar檔案
步驟與上面的4相同,可以參照上面的步驟過程。
7、原始碼下載
連結:http://pan.baidu.com/s/1eRHHGBK 密碼:9d90
相關推薦
基於Zookeeper服務註冊和發現
1、專案的目錄結構 2、基於zk服務註冊和發現的架構圖 3、服務端(像zk提供服務的訪問地址) package cn.zk.distribute; import org.apache.zookeeper.CreateMode; import org.ap
springcloud服務註冊和發現
微服務架構中,服務發現元件是一個非常關鍵的元件,服務消費者、服務提供者、服務發現元件的關係大致如下: 各個微服務啟動時,將自己的網路地址等資訊註冊到服務發現元件中,服務發現元件會儲存這些資訊 服務消費者可從服務發現元件查詢服務提供者的網路地址,並使用改地址呼叫服務提供者的介面 各個微服務與服務
服務註冊和發現Eureka《五》
eureka 是一個微服務註冊和發現的元件。分為eureka server 和 eureka client 。eureka server 為eureka 服務註冊中心,eureka client 為eureka 客戶端。 eureka 是spring cloud 首推的服務註冊和發現元件,與
Spring Boot + Spring Cloud 實現許可權管理系統 後端篇(十八):服務註冊和發現(Consul)
什麼是 Consul Consul 是 HashiCorp 公司推出的開源工具,用於實現分散式系統的服務發現與配置。與其它分散式服務註冊與發現的方案,Consul 的方案更“一站式”,內建了服務註冊與發現框架、分佈一致性協議實現、健康檢查、Key/Value 儲存、多資料中心方案,不再需要依賴其它工具(比如
第二篇:SpringCloud 構建微服務系統之服務註冊和發現(nacos)
上一篇我們學習了一下consul在soringcloud中的使用。今天要給大家介紹的阿里巴巴中介軟體團隊出品的Nacos來作為新一代的服務管理中介軟體。 首先學習Nacos之前,我們應該看看Nacos的官網,對它有一個初步的認識。 1. Nacos 官網 (https://nacos
第一篇:SpringCloud 構建微服務系統之服務註冊和發現(consul)
今天我們要學習的是consul在soringcloud中的使用。首先學習consul之前,我們應該看看consul的官網,對它有一個初步的認識。 1. consul 官網 (https://www.consul.io) 2. consul 簡介 consul是googl
Java後端愛上SpringCloud 第一節:服務註冊和發現 Eureka
Java後端愛上SpringCloud 第一節:服務註冊和發現 Eureka 一些連結 構建服務註冊中心EurekaServer 構建服務提供者EurekaClient 整合SpringBoot做視覺化監控 PS:還是老規矩,一些概念的東
spring-cloud微服務之路(三):服務註冊和發現之Eureka、Consul
在上一篇spring-cloud微服務之路(二):Spring Boot 我們介紹瞭如何快速的使用 Spring Boot 搭建一個微服務專案,這一篇我們演示如何分別使用 Spring Cloud Eureka 和 Spring Cloud Consul 完成
Spring Cloud 服務註冊和發現
Spring Cloud 服務註冊和發現 個人部落格 搭建服務註冊中心 匯入maven依賴 <parent> <groupId>org.springframework.boot</groupId> <artifactId&
Spring Cloud Consul 實現服務註冊和發現
Spring Cloud 是一個基於 Spring Boot 實現的雲應用開發工具,它為基於 JVM 的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。通過 Spring Boot 風格進行再封裝遮蔽掉了
微服務學習筆記(2)——使用Consul 實現 MagicOnion(GRpc) 服務註冊和發現
我會 names uid red mes tar art ret public 原文:微服務學習筆記(2)——使用Consul 實現 MagicOnion(GRpc) 服務註冊和發現1.下載打開Consul 筆者是windows下面開發的(也可以使用Docker)。 官
spring cloud 學習(2)核心: Eureka: 提供服務註冊和發現 註冊中心,負載均衡,故障轉移
官方描述:雲端服務發現,一個基於 REST 的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移 Eureka 一個服務中心,一個註冊中心,將可以提供的服務都註冊到這個元件中, ,其他呼叫者需要的時候去註冊中心去獲取,然後再呼叫,避免了服務間的直接呼叫,實現了服務間的解耦
SpringCloud——Eureka服務註冊和發現
一、SpringCloud和Dubbo SpringCloud整合了一套較為完整的微服務解決方案框架,而Dubbo只是解決了微服務的幾個方面的問題。 content Dubbo SpringCloud 服務註冊中心 zooke
springcloud 最新版本上手教程1及坑——(Eureka)服務註冊和發現
1.建個maven工程2.建2個module,一個做service,一個做clientnext <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/PO
【Java】用etcd做服務註冊和發現
最近嘗試了一下etcd來做服務的註冊發現 【etcd服務】 從etcd官網下載二進位制檔案即可,分配了三臺機器做叢集 10.0.1.98 etcd-001 10.0.1.205 etcd-002 10.0.1.182 etcd-003 然後用指令碼啟動服務
SpringCloud--Eureka服務註冊和發現
Eureka是SpringCloud家族中的一個元件,因為它的有服務註冊和發現的機制,所以很適合用於做註冊中心。Eureka有服務端和客戶端,註冊中心作為服務端,我們提供的服務作為客戶端註冊到服務端上,由Eureka統一管理。 作為註冊中心,它內部
Consul初探-服務註冊和發現
前言 經過上一篇的學習,現在已經來到了服務註冊發現環節;Consul 的核心功能就是服務註冊和發現,Consul 客戶端通過將自己註冊到 Consul 伺服器叢集,然後等待呼叫方去發現服務,實現代理轉發到真正的業務系統,還可以基於服務發現做負載均衡,甚至可以在客戶端請求到底服務之前進行攔截,做一些基礎性的工作
Spring Cloud Alibaba(一) 如何使用nacos服務註冊和發現
Nacos介紹 Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元資料及流量管理。 Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以“服務”為中心的現代應用架構 (例如微服務正規化、雲原生正規化
SpringBoot + Spring Cloud Consul 服務註冊和發現
![image.png](https://cdn.nlark.com/yuque/0/2020/png/359374/1595433507631-6d8b936d-72dc-4ec2-8148-15ae46e5ee12.png#align=left&display=inline&height=360&marg
Web Api 基於Zookeeper的服務註冊與發現
差異 基於Nginx的服務提供和消費 基於zookeeper的服務註冊和發現 zk的負載均衡是可以調控,nginx只是能調權重,其他需要可控的都需要自己寫外掛;但是nginx的吞吐量比zk大很多,可以根據業務選擇用哪種方式。 服務端註冊 1.建立WEB A