中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現Eureka集群搭建

發布時間:2021-12-10 17:26:45 來源:億速云 閱讀:180 作者:柒染 欄目:云計算

這篇文章將為大家詳細講解有關怎么實現Eureka集群搭建,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Eureka集群搭建

0.1 Eureka集群搭建

        在運行第一個Eureka應用時,服務器實例、服務提供者實例都只是啟動了一個,并沒有體現高可用的特性,本小節將對前面的Eureka應用進行改造,使其可以進行集群部署。

0.1.1 本例集群結構圖

        本例將會運行兩個服務器實例、兩個服務提供者實例,然后服務調用者請求服務,集群結構如圖3-6所示。

怎么實現Eureka集群搭建

圖3-6 集群結構

        第一個Eureka應用,使用的是瀏覽器訪問Eureka的服務調用者,而改造后,為了能看到負載均衡的效果,會編寫一個HttpClient的REST客戶端訪問服務調用者發布的服務。

        由于本書的開發環境只有一臺電腦,操作系統為Windows,如果要構建集群,需要修改hosts文件,為其添加主機名的映射。修改C:\Windows\System32\drivers\etc\hosts文件,添加以下內容:

        127.0.0.1 slave1 slave2

0.1.2 改造服務器端

        新建項目“first-cloud-server”,使用Maven配置與連載四的服務器一致,由于需要對同一個應用程序啟動兩次,因此需要在配置文件中使用profiles(關于profiles已經在連載三中講述過)。服務器配置文件請見代碼清單3-10。

        代碼清單3-10:codes\03\3.3\first-cloud-server\src\main\resources\application.yml

server:
  port: 8761
spring:
  application:
    name: first-cloud-server
  profiles: slave1
eureka:
  instance:
    hostname: slave1
  client:
    serviceUrl:
      defaultZone: http://slave2:8762/eureka/
---
server:
  port: 8762
spring:
  application:
    name: first-cloud-server
  profiles: slave2
eureka:
  instance:
    hostname: slave2
  client:
    serviceUrl:
      defaultZone: http://slave1:8761/eureka/

        代碼清單3-10中配置了兩個profiles,名稱分別為slave1和slave2。在slave1中,配置了應用端口為8761,主機名為slave1,當使用salve1這個profiles來啟動服務器時,將會向http://slave2:8762/eureka/注冊自己。使用salve2來啟動服務器,會向http://slave1:8761/eureka/注冊自己。簡單點說,就是兩個服務器啟動后,它們會互相注冊。

        修改啟動類,讓類在啟動時,讀取控制臺的輸入,決定使用哪個profiles來啟動服務器,請見代碼清單3-11。

        代碼清單3-11:

        codes\03\3.3\first-cloud-server\src\main\java\org\crazyit\cloud\FirstServer.java

@SpringBootApplication
@EnableEurekaServer
public class FirstServer {

	public static void main(String[] args) {
		// 讀取控制臺輸入,決定使用哪個profiles
		Scanner scan = new Scanner(System.in);
		String profiles = scan.nextLine();
		new SpringApplicationBuilder(FirstServer.class).profiles(profiles).run(args);
	}
}

        啟動類中,先讀取控制的輸入,再調用profiles方法來設置啟動的profles。需要注意的是,第一個啟動的服務器會拋出異常,異常原因我們前已經講述,拋出的異常可不必理會。

0.1.3 改造服務提供者

        服務提供者也需要啟動兩個實例,服務提供者的改造與服務端類似,將邊載四中的“first-ek-service-provider”復制出來,并改名為“first-cloud-provider”。修改配置文件,將服務提供者注冊到兩個服務器中,配置文件請見代碼清單3-12。

        代碼清單3-12:codes\03\3.3\first-cloud-provider\src\main\resources\application.yml

spring:
  application:
    name: first-cloud-provider
eureka:
  instance:
    hostname: localhost
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/

        再修改啟動類,為了避免端口決定,啟動時讀取控制臺輸出,決定使用哪個端口來啟動,啟動類如代碼清單3-13所示。

        代碼清單3-13:

        codes\03\3.3\first-cloud-provider\src\main\java\org\crazyit\cloud\FirstServiceProvider.java

@SpringBootApplication
@EnableEurekaClient
public class FirstServiceProvider {

	public static void main(String[] args) {
		// 讀取控制臺輸入的端口,避免端口沖突
		Scanner scan = new Scanner(System.in);
		String port = scan.nextLine();
		new SpringApplicationBuilder(FirstServiceProvider.class).properties(
				"server.port=" + port).run(args);
	}
}

        啟動類中使用了properties方法來設置啟動端口。為了能看到效果,還需要改造控制器,將服務調用者請求的URL保存起來并返回,修改后的控制器請見代碼清單3-14。

        代碼清單3-14:

        codes\03\3.3\first-cloud-provider\src\main\java\org\crazyit\cloud\FirstController.java

@RestController
public class FirstController {

	@RequestMapping(value = "/person/{personId}", method = RequestMethod.GET, 
			produces = MediaType.APPLICATION_JSON_VALUE)
	public Person findPerson(@PathVariable("personId") Integer personId, HttpServletRequest request) {
		Person person = new Person(personId, "Crazyit", 30);
		// 為了查看結果,將請求的URL設置到Person實例中
		person.setMessage(request.getRequestURL().toString());
		return person;
	}
}

        控制器的findPerson方法,將請求的URL保存到Person實例的message屬性中,調用服務后,可以通過message屬性來查看請求的URL。

0.1.4 改造服務調用者

        將連載四中的“first-ek-service-invoker”復制并改名為“first-cloud-invoker”。本例中的服務調用者只需啟動一個實例,因此修改下配置文件即可使用,請見代碼清單3-15。

        代碼清單3-15:codes\03\3.3\first-cloud-invoker\src\main\resources\application.yml

server:
  port: 9000
spring:
  application:
    name: first-cloud-invoker
eureka:
  instance:
    hostname: localhost
  client:
    serviceUrl:
      defaultZone: http://slave1:8761/eureka/,http://slave2:8761/eureka/

        修改的配置,將服務調用注冊到兩個服務器上。

0.1.5 編寫REST客戶端進行測試

        本例使用的是HttpClient,HttpClient是Apache提供的一個HTTP工具包。新建名稱為“first-cloud-rest-client”的項目,在pom.xml中加入以下依賴:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

        新建啟動類,在main方法中編寫調用REST服務的代碼,如代碼清單3-16所示。

        代碼清單3-16:

        03\3.3\first-cloud-rest-client\src\main\java\org\crazyit\cloud\TestHttpClient.java

	public static void main(String[] args) throws Exception {
		// 創建默認的HttpClient
		CloseableHttpClient httpclient = HttpClients.createDefault();
		// 調用6次服務并輸出結果
		for(int i = 0; i < 6; i++) {
			// 調用 GET 方法請求服務
			HttpGet httpget = new HttpGet("http://localhost:9000/router");
			// 獲取響應
			HttpResponse response = httpclient.execute(httpget);
			// 根據 響應解析出字符串
			System.out.println(EntityUtils.toString(response.getEntity()));
		}
	}

        在main方法,調用了6次9000端口的router服務并輸出結果。完成編寫后,按以下順序啟動各個組件:

        ?     啟動兩個服務器端,控制臺中分別輸入“slave1”和“slave2”。

        ?     啟動兩個服務提供者,控制臺分別輸入8081與8082。

        ?     啟動服務調用者。

        啟動了整個集群后,運行TestHttpClient,可以看到輸出如下:

{"id":1,"name":"Crazyit","age":30,"message":"http://localhost:8081/person/1"}
{"id":1,"name":"Crazyit","age":30,"message":"http://localhost:8082/person/1"}
{"id":1,"name":"Crazyit","age":30,"message":"http://localhost:8081/person/1"}
{"id":1,"name":"Crazyit","age":30,"message":"http://localhost:8082/person/1"}
{"id":1,"name":"Crazyit","age":30,"message":"http://localhost:8081/person/1"}
{"id":1,"name":"Crazyit","age":30,"message":"http://localhost:8082/person/1"}

        根據輸出結果可知,8081與8082端口分別被請求了3次,可見已經達到負載均衡的目的。

關于怎么實現Eureka集群搭建就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁明县| 仲巴县| 射洪县| 铅山县| 临西县| 广安市| 怀化市| 海林市| 荣成市| 正安县| 武胜县| 凉山| 西乌珠穆沁旗| 乐平市| 安达市| 刚察县| 乐都县| 汨罗市| 宁化县| 益阳市| 石阡县| 罗平县| 陆良县| 贺州市| 鹤峰县| 苍山县| 宿松县| 武义县| 昌平区| 赞皇县| 黄梅县| 隆尧县| 田林县| 徐水县| 监利县| 威宁| 辽中县| 泸水县| 慈溪市| 定西市| 德惠市|