服務註冊與發現【Eureka】- 單機Eureka構建步驟

構建Eureka Server 端服務註冊中心

新建Module:cloud-eureka-server7001

POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>yct-cloud-parent</artifactId>
        <groupId>com.yct.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-eureka-server7001</artifactId>


    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>com.yct.springcloud</groupId>
            <artifactId>cloud-base-api</artifactId>
            <version>${project.version}</version>
            <scope>compile</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

    </dependencies>
</project>
POM

 

POM中Cloud 1.X 和 Cloud 2.X 的區別:

 

 

YML:

server:
  port: 7001

eureka:
  instance:
    hostname: localhost  #eureka服務端的實例名字
  client:
    register-with-eureka: false    #表識不向註冊中心註冊本身
    fetch-registry: false   #表示本身就是註冊中心,職責是維護服務實例,並不須要去檢索服務
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/    #設置與eureka server交互的地址查詢服務和註冊服務都須要依賴這個地址
YML

 

主啓動類:

  添加註解:@EnableEurekaServerweb

package com.yct.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication7001.class,args);
    }
}
EurekaServerApplication7001

 

測試運行:

 

 

 

Eureka Client 端 將cloud-provider-payment8001 註冊進 Eureka Server 成爲服務提供者 provider

修改 模塊:cloud-provider-payment8001

POM:

    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
增長POM依賴

 

POM中Cloud 1.X 和 Cloud 2.X 的區別:

 

 

 

YML:

eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://localhost:7001/eureka
添加YML

 

主啓動類:

添加註解:@EnableEurekaClientspring

 

啓動測試:

要先啓動EurekaServer,再啓動當前客戶端。apache

 

 

 服務名對應:

 

 

 

Eureka Client 端 將cloud-consumer-order80 註冊進 Eureka Server 成爲服務消費者 consumer

添加POM:

        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
添加POM

 

YML:

server:
  port: 8080
spring:
  application:
    name: cloud-order-service

eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://localhost:7001/eureka
YML

 

主啓動類:

  添加註解:@EnableEurekaClientjson

測試運行:

要先啓動EurekaServer,再啓動當前客戶端。api

 

 

 

 

訪問Consumer接口:

http://localhost:8080/consumer/payment/get/11app

 

問題:

  爲何集成了Eureka 後,返回的數據由原來的 JSON 變成了 xml 格式的呢?maven

緣由:

集成EurekaClient,會須要jackson-dataformat-xml這個依賴

 

 

jackson-dataformat-xml這個依賴,能夠將實體轉換爲xml也能夠轉換爲json,根據發起請求的request頭中Accept來決定

 

 

如上這個請求,application/xml 在最後匹配json的*/ *前面,優先級高過json,因此返回了XML。ide

而下面這種方式,就返回了 json。spring-boot

 

 

 

 

 

 

解決方案1:

cloud-consumer-order8080 的 pom 中,將包 spring-cloud-starter-netflix-eureka-client 包內的 jackson-dataformat-xml 包排除便可。測試

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.jackson.dataformat</groupId>
                    <artifactId>jackson-dataformat-xml</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
排除 jackson-dataformat-xml 包

解決方案2:

 不把POM中的 jackson-dataformat-xml 包去掉的前提下,在 cloud-consumer-order8080 的接口中,mapping 註解上添加 produces = { "application/json;charset=UTF-8" }

 

 

相關文章
相關標籤/搜索