Eureka

1.編寫Eureka入門案例

(1)@EnableEurekaServer註解的作用是什麼?

通過註解在Spring Boot項目啓動時啓動Eureka Server。

2.創建集羣版的Eureka註冊中心

(1)創建一個Maven的jar項目。

在這裏插入圖片描述

(2)修改POM文件,添加Eureka Server啓動器。

<!--Eureka註冊中心-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

(3)修改POM文件,添加Spring Boot的Web啓動器。

<!--啓動器-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

(4)修改全局配置文件,添加註冊中心配置。

spring.application.name=eureka-server
server.port=8761

#設置eureka的實例名稱,以配置文件的變量爲主
eureka.instance.hostname=eureka1

(5)修改全局配置文件,添加其他配置中心地址。

#設置服務註冊中心地址,指向另一個服務
eureka.client.service-url.defaultZone=http://user:123456@eureka2:8761/eureka/

(6)添加Logback配置文件。

<?xml version="1.0" encoding="UTF-8" ?>
 <configuration>
<!--定義日誌文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->  
    <property name="LOG_HOME" value="${catalina.base}/logs/" />  
    <!-- 控制檯輸出 -->   
    <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
       <!-- 日誌輸出編碼 -->  
        <layout class="ch.qos.logback.classic.PatternLayout">   
             <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
            </pattern>   
        </layout>   
    </appender>   
    <!-- 按照每天生成日誌文件 -->   
    <appender name="RollingFile"  class="ch.qos.logback.core.rolling.RollingFileAppender">   
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日誌文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>   
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>   
        <layout class="ch.qos.logback.classic.PatternLayout">  
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符--> 
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
            </pattern>   
       </layout> 
        <!--日誌文件最大的大小-->
       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
         <MaxFileSize>10MB</MaxFileSize>
       </triggeringPolicy>
    </appender>     

    <!-- 日誌輸出級別 -->
    <root level="DEBUG">   
        <appender-ref ref="Stdout" />   
        <appender-ref ref="RollingFile" />   
    </root> 



<!--日誌異步到數據庫 -->  
<!--     <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        日誌異步到數據庫 
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
           連接池 
           <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
              <driverClass>com.mysql.jdbc.Driver</driverClass>
              <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
              <user>root</user>
              <password>root</password>
            </dataSource>
        </connectionSource>
  </appender> -->

</configuration>

3.Eureka集羣部署

(1)項目打包命令是什麼?

Install

(2)啓動項目是如何加載不同的配置文件?

在啓動腳本文件給定不同配置文件的變量名稱

(3)如何修改Linux的Host文件?

Vim /etc/hosts
192.168.70.134 eureka1
192.168.70.135 eureka2

4.創建provider服務

(1)@EnableEurekaClient註解的作用是什麼?

通過註解在Spring Boot項目啓動時啓動微服務

5.註冊服務並測試接口

(1)啓動Provider。
(2)在註冊中心管理頁面中,查看是否含有Provider服務。
(3)啓動瀏覽器,訪問Provider服務做接口測試。

在這裏插入圖片描述

6.創建consumer服務

(1)創建一個Maven的jar項目。

在這裏插入圖片描述

(2)修改POM文件,添加Eureka啓動器。

(3)修改POM文件,添加Spring Boot的Web啓動器。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

(4)修改全局配置文件,添加註冊中心集羣配置。

spring.application.name=eureka-consumer
server.port=9091

#設置服務註冊中心地址,指向另一個服務
eureka.client.service-url.defaultZone=http://eureka1:8761/eureka/,http://eureka2:8761/eureka/

(5)在Service中通過LoadBalancerClient完成對服務的調用。

@Service
public class UserService {

    @Autowired
    //ribbon負載均衡器,根據其他服務的名稱返回服務的實例
    private LoadBalancerClient loadBalancerClient;

    public List<User> getUser(){
        //1.獲取服務實例:si:eureka-provider服務的實例。封裝了服務的基本信息:IP,端口
        ServiceInstance si = this.loadBalancerClient.choose("eureka-provider");
        //2.拼接訪問服務的 URL
        //http://localhost:9090/user
        StringBuffer sb=new StringBuffer();
        sb.append("http://").append(si.getHost()).append(":").append(si.getPort()).append("/user");

        //3.通過springMVC的 RestTemplate請求服務
        RestTemplate rt=new RestTemplate();
        //獲取返回類型
        ParameterizedTypeReference<List<User>> type=new ParameterizedTypeReference<List<User>>() {};
        //4.ResponseEntity:封裝了返回值信息:參數爲url,請求方法,null,返回類型
        ResponseEntity<List<User>> response=rt.exchange(sb.toString(), HttpMethod.GET,null,type);
        List<User> list = response.getBody();

        return list;
    }
}

(6)創建Controller,在Controller中注入Service對象。

@RestController
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping("/consumer")
    public List<User> getUser(){
        return this.userService.getUser();
    }
}

7.在consumer中調用provider服務

(1)啓動Consumer服務。
(2)測試Consumer服務,查看調用Provider所返回的數據。
在這裏插入圖片描述

8.Eureka架構圖原理

(1)請描述Eureka架構原理。

在這裏插入圖片描述
Register(服務註冊):把自己的 IP 和端口註冊給 Eureka。
Renew(服務續約):發送心跳包,每 30 秒發送一次。告訴 Eureka 自己還活着。
Cancel(服務下線):當 provider 關閉時會向 Eureka 發送消息,把自己從服務列表中刪除。防
止 consumer 調用到不存在的服務。
Get Registry(獲取服務註冊列表):獲取其他服務列表。
Replicate(集羣中數據同步):eureka 集羣中的數據複製與同步。
Make Remote Call(遠程調用):完成服務的遠程調用。

9.什麼是CAP定理

(1)什麼是CAP原則?

CAP 原則又稱 CAP 定理,指的是在一個分佈式系統中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分區容錯性),三者不可兼得。

(2)C、A、P分別表示什麼?

在這裏插入圖片描述

(3)CA、CP、AP分別表示什麼含義?

在這裏插入圖片描述

10.ZooKeeper與Eureka的區別

(1)Zookeeper與Eureka有哪些區別?

在這裏插入圖片描述

11.Eureka的服務自我保護

(1)什麼是自我保護模式?

在這裏插入圖片描述

(2)爲什麼要啓動自我保護?

在這裏插入圖片描述

12.關閉Eureka的服務自我保護

(1)如何關閉自我保護?

修改 Eureka Server 配置文件
#關閉自我保護:true:開啓自我保護,false:關閉
eureka.server.enable-self-preservation=false
#清理間隔(單位:毫秒,默認是60*1000)
eureka.server.eviction-interval-timer-in-ms=60000

13.服務的優雅停服

(1)如何實現優雅停服?

1.添加座標
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.修改配置文件
#配置優雅停服
management.endpoints.web.exposure.include=shutdown
#啓動shutdown
management.endpoint.shutdown.enabled=true

3.訪問URL:http://ip:port/actuator/shutdown

(

2)訪問優雅停服的URI是什麼?

http://ip:port/actuator/shutdown

14.開啓Eureka註冊中心的安全認證

(1)實現Eureka安全認證的步驟是什麼?

1.添加座標
<!--Eureka註冊中心的安全認證-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2.修改配置文件
#註冊中心安全認證
spring.security.user.name=user
spring.security.user.password=123456
3.註冊地址改爲
#設置服務註冊中心地址,指向另一個服務
eureka.client.service-url.defaultZone=http://user:123456@eureka2:8761/eureka/

4.啓動啓動類,訪問註冊中心則需用戶名密碼

(2)如果開啓安全認證,註冊中心在集羣環境下各個節點訪問時,如何傳遞用戶名與密碼?

eureka.client.service-url.defaultZone=http://user:123456@eureka1:8761/eureka/, http://user:123456@eureka2:8761/eureka/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章