eclipse上springCloud分布式微服务搭建-干货

1、建立maven父工程(pom)java

pom.xml以下:web

<?xml version="1.0"encoding="UTF-8"?>spring

<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">apache

  <modelVersion>4.0.0</modelVersion>api

  <groupId>com.snowlink</groupId>浏览器

  <artifactId>springCloud</artifactId>app

  <version>0.0.1-SNAPSHOT</version>负载均衡

  <packaging>pom</packaging>maven

 

  <parent>spring-boot

              <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>

2、建立两个子工程

两个子工程都是springBoot的项目,一个是服务端(server),一个是客户端(client)


3、服务端配置

一、 因为服务端在启动类上须要加载@EnableEurekaServer注解,因此服务端的pom.xml文件中须要添加依赖:

<dependency>

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

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

 </dependency>

二、 服务端启动类

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、特别注意:

一、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就能够看到

4、客户端配置

一、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,


5、网关配置:

一、 pom.xml配置:

<dependency>

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

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

 </dependency>

二、 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(用于发布的服务,能够是多个)

三、启动类配置:

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便可解决问题。