eclipse上springCloud分布式微服務搭建-干貨


一、創建maven父工程(pom)

pom.xml如下:

<?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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.snowlink</groupId>

  <artifactId>springCloud</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  <packaging>pom</packaging>

 

  <parent>

              <groupId>org.springframework.boot</groupId>

              <artifactId>spring-boot-starter-parent</artifactId>

              <version>1.5.5.RELEASE</version>

</parent>

 

  <modules>

    <module>springCloud-eureka-server</module>

    <module>springCloud-eureka-client</module>

  </modules>

 

  <dependencyManagement> 

        <dependencies> 

            <dependency> 

                <groupId>org.springframework.cloud</groupId> 

                <artifactId>spring-cloud-dependencies</artifactId> 

                <version>Dalston.SR3</version> 

                <type>pom</type>  

                <scope>import</scope> 

            </dependency> 

        </dependencies> 

    </dependencyManagement> 

 

    <dependencies> 

        <dependency> 

            <groupId>org.springframework.cloud</groupId> 

            <artifactId>spring-cloud-starter-config</artifactId> 

        </dependency> 

        <dependency> 

            <groupId>org.springframework.cloud</groupId> 

            <artifactId>spring-cloud-starter-eureka</artifactId> 

        </dependency> 

        <dependency> 

            <groupId>org.springframework.boot</groupId> 

            <artifactId>spring-boot-devtools</artifactId> 

            <optional>true</optional> 

        </dependency> 

    </dependencies>

</project>

二、創建兩個子工程

兩個子工程都是springBoot的項目,一個是服務端(server),一個是客戶端(client)


三、服務端配置

1、 由於服務端在啟動類上需要加載@EnableEurekaServer注解,所以服務端的pom.xml文件中需要添加依賴:

<dependency>

    <groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-eureka-server</artifactId>

 </dependency>

2、 服務端啟動類

package org.springCloud.eureka.server;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

 

@SpringBootApplication

@EnableEurekaServer

publicclass App

{

    publicstaticvoid main( String[] args )

    {

           SpringApplication.run(App.class, args);

        System.out.println( "Hello World!" );

    }

}

 

 

 

3、特別注意:

1、com.sun.jersey.api.client.ClientHandlerException:java.net.ConnectException: Connection refused: connect

或者com.netflix.discovery.shared.transport.TransportException: Cannotexecute request on any known server

原因如下:

在默認設置下,Eureka服務注冊中心也會將自己作為客戶端來嘗試注冊它自己,所以我們需要禁用它的客戶端注冊行為。

禁止方式如下:在application.yml配置文件中增加以下內容

registerWithEureka:false

    fetchRegistry:false

 

如下所示:

server:

  port: 7070

eureka:

  client:

    registerWithEureka:false

    fetchRegistry:false

    serviceUrl:

      defaultZone: http://localhost:7070/eureka/

  instance:

   hostname: localhost

重新啟動即可。

瀏覽器訪問localhost:7070就可以看到

四、客戶端配置

1、application.yml配置:

server:

  port: 8081

eureka:

  client:

    registerWithEureka:false

    fetchRegistry:false

    serviceUrl:

      defaultZone: http://localhost:8080/eureka/

spring:

  application:

name: service(服務名稱)

2、入口類:

package org.springCloud.eureka.client;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

 

 

/**

 * Hello world!

 *

 */

 

@SpringBootApplication

@EnableDiscoveryClient

@RestController

publicclass App

{

    publicstaticvoid main( String[] args )

    {

           SpringApplication.run(App.class, args);

        System.out.println( "Hello World!" );

    }

   

    @GetMapping("/service")

    public String service() {

           return"service";

    }

}

 

注意:

光是注冊了服務還不行,這里可以再配一個網關,讓服務調用有統一的入口.

網關用於請求轉發和負載均衡,類似於Nginx,


五、網關配置:

1、 pom.xml配置:

<dependency>

        <groupId>org.springframework.cloud</groupId>

        <artifactId>spring-cloud-starter-zuul</artifactId>

 </dependency>

2、 application.yml配置

server:

  port: 8082

eureka:

  client:

    registerWithEureka:false

    fetchRegistry:false

    serviceUrl:

      defaultZone: http://localhost:8080/eureka/

spring:

  application:

    name: gateway

zuul:

  routes:

service: service(用於發布的服務,可以是多個)

3、啟動類配置:

package org.gateway;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

 

/**

 * Hello world!

 *

 */

@SpringBootApplication

@EnableZuulProxy

@EnableEurekaClient

publicclass App

{

    publicstaticvoid main( String[] args )

    {

           SpringApplication.run(App.class, args);

    }

}

注意(異常):

java.lang.NoClassDefFoundError:org/springframework/boot/context/embedded/FilterRegistrationBean

原因分析:找不org.springframework.boot.context.embedded.FilterRegistrationBean,查看源碼發現:在1.5.6版本中FilterRegistrationBean的包路徑已經改為org.springframework.boot.web.servlet.org.springframework.boot.web.servlet.FilterRegistrationBean,所以引發錯誤。

解決辦法:既然是引用了以前的包路徑,說明是pom.xml文件的問題。檢查發現spring-cloud-dependencies 的版本沒有更新,改為Dalston.SR3即可解決問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM