九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
使用Spring Cloud Eureka實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)

什么是服務(wù)注冊(cè)與發(fā)現(xiàn)

服務(wù)注冊(cè)與發(fā)現(xiàn)

在服務(wù)化的早期,服務(wù)不是很多,服務(wù)的注冊(cè)與發(fā)現(xiàn)并不是什么新鮮的名詞,Nginx+內(nèi)部域名服務(wù)器方式,甚至Nginx+host文件配置方式也能完成服務(wù)的注冊(cè)與發(fā)現(xiàn)。服務(wù)上下線需要在nginx,服務(wù)器做相應(yīng)的配置,一旦服務(wù)的IP端口發(fā)生變化,都需要在nginx上做相應(yīng)的配置,為了解決這個(gè)問題引入服務(wù)注冊(cè)中心。
服務(wù)注冊(cè),即服務(wù)在啟動(dòng)的時(shí)候就將服務(wù)的IP,端口,版本號(hào)等EndPoint注冊(cè)到注冊(cè)中心(Eueka,Zookeeper,Consul)對(duì)服務(wù)進(jìn)行統(tǒng)一管理.
服務(wù)發(fā)現(xiàn),簡(jiǎn)單的就是說,不管服務(wù)上下線,當(dāng)對(duì)某個(gè)服務(wù)發(fā)起請(qǐng)求時(shí),能夠快速的從本地緩存或者注冊(cè)中心的注冊(cè)列表中,快速找到服務(wù)提供者。

服務(wù)化早期的做法

示例工程說明

Tips:代碼示例:https://github.com/SoftwareKing/spring-cloud-study/tree/master/sc-eureka-first

參考工程

Spring MVC中基于無狀態(tài)的REST

工程可以參考sc-rest-demo下面的sc-rest-provider和sc-rest-consumer,具體使用如下代碼所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@RestController
@RequestMapping("/sc")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
// 從屬性文件中讀取服務(wù)提供的URL
@Value("${order.orderServiceUrl}")
private String orderServiceUrl;
@GetMapping("/consumer/{id}")
public OrderModel getOrderInfo(@PathVariable Long id) {
// this.restTemplate.getForObject("http://localhost:8000/sc/order/" +
// id,OrderModel.class);
return this.restTemplate.getForObject(this.orderServiceUrl + "/sc/order/" + id,
OrderModel.class);
}
}

大家注意到?jīng)],把http://localhost:8000 ,硬編碼到程序中,是不是比較low??梢圆捎蒙厦娲a中的方式:orderServiceUrl解決。但是這樣還是比較low,下面介紹一下引入Eureka實(shí)現(xiàn)服務(wù)注冊(cè)與發(fā)現(xiàn)的處理。

使用Eureka實(shí)現(xiàn)服務(wù)的注冊(cè)與發(fā)現(xiàn)

搭建注冊(cè)中心-Eureka Server

1.引入依賴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<!-- 引入spring boot的依賴 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
</parent>
<artifactId>sc-eureka-first-server-HA01</artifactId>
<name>sc-eureka-first-server-HA01</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- 引入Spring Cloud Eureka依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
<!-- 引入spring cloud的依賴 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 添加spring-boot的maven插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

  1. 在Resources目錄下創(chuàng)建application.yml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    server:
    port: 8761 # 指定該Eureka實(shí)例的端口
    eureka:
    client:
    #表示是否將自己注冊(cè)到Eureka Server上,默認(rèn)為true,當(dāng)前應(yīng)用為Eureka Server所以無需注冊(cè)
    registerWithEureka: false
    #表示是否從Eureka Server獲取注冊(cè)信息,默認(rèn)為true。因?yàn)檫@是一個(gè)單點(diǎn)的Eureka Server,不需要同步其他的Eureka Server節(jié)點(diǎn)的數(shù)據(jù),故而設(shè)為false。
    fetchRegistry: false
    #Eureka Server的訪問地址,服務(wù)注冊(cè)和client獲取服務(wù)注冊(cè)信息均通過該URL,多個(gè)服務(wù)注冊(cè)地址用,隔開
    serviceUrl:
    defaultZone: http://localhost:8761/eureka/
    # 參考文檔:http://projects.spring.io/spring-cloud/docs/1.0.3/spring-cloud.html#_standalone_mode
    # 參考文檔:http://my.oschina.net/buwei/blog/618756

3.創(chuàng)建Spring Boot主應(yīng)用程序啟動(dòng)代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package org.xujin.sc.eureka.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* Eureka Server
* @author xujin
*/
@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaServer {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaServer.class, args);
}
}

啟動(dòng)Eureka server測(cè)試:
啟動(dòng)sc-eureka-first-server-HA01,訪問http://localhost:8761/ ,如下圖所示:

Eureka server

創(chuàng)建服務(wù)提供者

1.服務(wù)提供者,為了演示在這里提供一個(gè)簡(jiǎn)單的訂單查詢服務(wù),如工程sc-eureka-first-provider01sc-eureka-first-provider02所示。
2.主程序入口代碼,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package org.xujin.sc.eureka.first.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* 服務(wù)提供者端,加上@EnableDiscoveryClient注解,完成服務(wù)注冊(cè)。
* @author xujin
* @site http://xujin.org
*/
@SpringBootApplication
@EnableDiscoveryClient
// @EnableEurekaClient
public class OrderProviderSpringBootAppliaction {
public static void main(String[] args) {
SpringApplication.run(OrderProviderSpringBootAppliaction.class, args);
}
}

Tips:如果使用Eureka, 可以使用@EnableEurekaClient注解,但是推薦使用@EnableDiscoveryClient代替@EnableEurekaClient注解,因?yàn)锧EnableDiscoveryClient是一個(gè)高度的抽象, 來自于spring-cloud-commons, 由于Spring Cloud選型是中立的因此抽象出該接口, 當(dāng)服務(wù)注冊(cè)中心選型改變?yōu)镋ureka,ZK,Consul時(shí),不需要修改原有代碼中的注解。

3.服務(wù)提供者暴露的服務(wù)-OrderController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
@RestController
public class OrderController {
@Autowired
private OrderService orderService;
@GetMapping("/sc/order/{id}")
public OrderModel findOrderById(@PathVariable Long id) {
OrderModel orderModel = orderService.findOrderByOrderId(id);
return orderModel;
}
}

啟動(dòng)服務(wù)提供者,把服務(wù)注冊(cè)信息,注冊(cè)到Eureka Server注冊(cè)中心
啟動(dòng)sc-eureka-first-provider01,當(dāng)啟動(dòng)其中一個(gè)服務(wù)后刷新Eureka Server會(huì)出現(xiàn)安全模式,如下圖所示:

安全模式

啟動(dòng)sc-eureka-first-provider02,刷新Eureka Server如下圖所示。

安全模式

創(chuàng)建服務(wù)消費(fèi)者

服務(wù)消費(fèi)者主要是一個(gè)簡(jiǎn)單的用戶服務(wù),用戶服務(wù)查詢訂單服務(wù)的訂單信息。
1.引入相應(yīng)的依賴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?xml version="1.0"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.xujin.sc</groupId>
<artifactId>sc-eureka-first-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sc-eureka-first-consumer</name>
<url>http://maven.apache.org</url>
<!-- 引入spring boot的依賴 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.6</version>
<scope>provided</scope>
</dependency>
</dependencies>
<!-- 引入spring cloud的依賴 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 添加spring-boot的maven插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

2.主程序入口代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package org.xujin.sc.eureka.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
//消費(fèi)者端加入服務(wù)發(fā)現(xiàn)注解
@EnableDiscoveryClient
@SpringBootApplication
public class UserConsumerApplication {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(UserConsumerApplication.class, args);
}
}

  1. 消費(fèi)者調(diào)用Controller。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@RestController
public class UserController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
// discoveryClient獲取服務(wù)列表中,應(yīng)用名為sc-eureka-first-provider一個(gè)服務(wù)注冊(cè)信息
public String serviceUrl() {
List<ServiceInstance> list = discoveryClient
.getInstances("sc-eureka-first-provider");
if (list != null && list.size() > 0) {
return String.valueOf(list.get(0).getUri());
}
return null;
}
@GetMapping("/sc/user/{id}")
public Order findByIdByEurekaServer(@PathVariable Long id) {
String providerServiceUrl = serviceUrl();
return this.restTemplate.getForObject(providerServiceUrl + "sc/order/" + id,
Order.class);
}
}

如上述代碼,所示使用discoveryClient.getInstances("sc-eureka-first-provider")獲取服務(wù)名為sc-eureka-first-provider的服務(wù)注冊(cè)列表信息。

測(cè)試

先后啟動(dòng)sc-eureka-first-consumer,如沒有異常,打開瀏覽器訪問:http://localhost:8010/sc/user/2 ,debug如下所示可以看到

服務(wù)提供者端服務(wù)發(fā)現(xiàn)

在刷新一下Eureka Server,如圖下所示,此時(shí)安全模式關(guān)閉。

Eureka Server

關(guān)于安全模式,在本篇文章中,暫不討論,后面將會(huì)專寫一篇文章介紹,請(qǐng)暫時(shí)忽略。

獲取消費(fèi)者獲取服務(wù)端消費(fèi)列表

  1. 使用EurekaClient獲取服務(wù)注冊(cè)信息

    1
    2
    3
    4
    5
    6
    7
    @Autowired
    private EurekaClient discoveryClient;
    public String serviceUrl() {
    InstanceInfo instance = discoveryClient.getNextServerFromEureka("STORES", false);
    return instance.getHomePageUrl();
    }
  2. 使用DiscoveryClient獲取服務(wù)注冊(cè)信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Autowired
    private DiscoveryClient discoveryClient;
    public String serviceUrl() {
    List<ServiceInstance> list = discoveryClient.getInstances("STORES");
    if (list != null && list.size() > 0 ) {
    return list.get(0).getUri();
    }
    return null;
    }

    參考鏈接:https://github.com/spring-cloud/spring-cloud-netflix/blob/master/docs/src/main/asciidoc/spring-cloud-netflix.adoc

小結(jié)

上面這個(gè)例子使用Eureka實(shí)現(xiàn)了服務(wù)的注冊(cè)與發(fā)現(xiàn),但是有一個(gè)問題就是獲取服務(wù)注冊(cè)列表的方式比較low并且太方便,還有一個(gè)問題就是沒有使用負(fù)載均衡(Load Balance),這樣就沒法實(shí)現(xiàn)微服務(wù)的HA。在后面的文章將會(huì)介紹Eureka Server的HA和使用Robbin實(shí)現(xiàn)LB。。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
springcloud(第三篇)springcloud eureka 服務(wù)注冊(cè)與發(fā)現(xiàn)
SpringCloud微服務(wù)部署
搭建eureka,gateway,admin,redis,docker系列一gateway
SpringCloud之Zuul
IntelliJ IDEA創(chuàng)建多服務(wù)模塊的Spring Cloud微服務(wù)項(xiàng)目
史上最簡(jiǎn)單的SpringCloud教程 | 第十三篇: 斷路器聚合監(jiān)控(Hystrix Turbine)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服