zoukankan      html  css  js  c++  java
  • 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即可解决问题。

  • 相关阅读:
    【模板】Sparse-Table
    UVa 11235 Frequent values
    【模板】树状数组
    UVa 1428 Ping pong
    数学技巧
    UVa 11300 Spreading the Wealth
    UVa 11729 Commando War
    UVa 11292 Dragon of Loowater
    POJ 3627 Bookshelf
    POJ 1056 IMMEDIATE DECODABILITY
  • 原文地址:https://www.cnblogs.com/jpfss/p/9713089.html
Copyright © 2011-2022 走看看