springcloud之eureka+feign+zuul基于boot2.0与cloudF版本搭建案例

编程

springcloud 之eureka+feign+zuul  基于boot2.0与cloud F版本搭建案例

 

问题: 1、我们知道dubbo是如何去调用其他应用,那么fegin是如何去调用的?

            2、网关的作用是干嘛的呢?

            3、eureka的作用是啥?

下面通过这个简单的实例可以帮助你去了解这些问题。

 

 

前言:

springcloud可以借助官网的一些工具去搭建比如:https://start.spring.io/  如下图:

可以快速构建项目

当然也有另外一种:Spring IO Platform与spring boot版本对应关系

Spring IO Platform版本

spring boot 版本

spring cloud 版本

Cairo-SR7

2.0.8.RELEASE

Finchley

Cairo-SR6

2.0.7.RELEASE

Finchley

Cairo-SR5

2.0.6.RELEASE

Finchley

Brussels-SR16

1.5.19.RELEASE

Edgware

Brussels-SR15

1.5.18.RELEASE

Edgware

Brussels-SR7

1.5.10.RELEASE

Edgware

Spring IO是用于构建现代应用程序的具有凝聚力的版本平台。它是一种模块化的企业级发行版,提供了一系列精选的依赖项,同时使开发人员可以完全控制仅部署所需的部分。Spring IO是100%开源,精益和模块化的。

 

因为需要注意springboot与cloud的之间版本对应的关系,其实挺复杂的。

最好参照这个官网的一些例子去实践。

 

本次搭建只是一个简单demo,比如pom.xml父类,什么的没有去创建。

 

 

本项目目录结构:

EurekaService :注册中心

Order:订单服务

User:  用户服务

Zuul:网关服务

 

注册中心代码:

pom文件:

  

   <parent>

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

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

<version>2.0.2.RELEASE</version>

</parent>

     

    <properties>

        <java.version>1.8</java.version>

        <spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>

    </properties>

 

    <dependencies>

    

        <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-server</artifactId>

        </dependency>

 

      <dependency>

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

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

<scope>test</scope>

</dependency>

    </dependencies>

 

    <dependencyManagement>

        <dependencies>

            <dependency>

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

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

                <version>${spring-cloud.version}</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

        </dependencies>

    </dependencyManagement>

    

  <repositories>

<repository>

<id>spring-snapshots</id>

<name>Spring Snapshots</name>

<url>https://repo.spring.io/libs-snapshot</url>

<snapshots>

<enabled>true</enabled>

</snapshots>

</repository>

<repository>

<id>spring-milestones</id>

<name>Spring Milestones</name>

<url>https://repo.spring.io/libs-milestone</url>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

<repository>

<id>spring-releases</id>

<name>Spring Releases</name>

<url>https://repo.spring.io/libs-release</url>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

</repositories>

 

    <build>

        <plugins>

            <plugin>

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

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>

yml文件:

server:

  port: 9000

 

eureka:

  instance:

    hostname: localhost

  client:

    registerWithEureka: false

    fetchRegistry: false

    serviceUrl:

      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

spring:

  application:

    name: eurka-server

启动类:

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

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

 

@SpringBootApplication

@EnableEurekaServer

public class EurekaServer {

public static void main(String[] args) {

SpringApplication.run(EurekaServer.class, args);

 

}

}

项目截图:

 

User项目类:

pom.xml

 <parent>

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

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

<version>2.0.2.RELEASE</version>

</parent>

     

    <properties>

        <java.version>1.8</java.version>

        <spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>

    </properties>

    

    

    <dependencies>

    

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

 

      <dependency>

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

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

<scope>test</scope>

</dependency>

    </dependencies>

 

    <dependencyManagement>

        <dependencies>

            <dependency>

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

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

                <version>${spring-cloud.version}</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

        </dependencies>

    </dependencyManagement>

    

  <repositories>

<repository>

<id>spring-snapshots</id>

<name>Spring Snapshots</name>

<url>https://repo.spring.io/libs-snapshot</url>

<snapshots>

<enabled>true</enabled>

</snapshots>

</repository>

<repository>

<id>spring-milestones</id>

<name>Spring Milestones</name>

<url>https://repo.spring.io/libs-milestone</url>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

<repository>

<id>spring-releases</id>

<name>Spring Releases</name>

<url>https://repo.spring.io/libs-release</url>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

</repositories>

 

    <build>

        <plugins>

            <plugin>

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

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>

启动类:

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

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

 

@SpringBootApplication

@EnableEurekaClient

public class User {

public static void main(String[] args) {

SpringApplication.run(User.class, args);

 

}

}

yml文件内容:

server:

  port: 9100

 

eureka:

  instance:

    hostname: localhost

  client:

    serviceUrl:

      defaultZone: http://${eureka.instance.hostname}:9000/eureka/

spring:

  application:

    name: UserServer

项目结构:

 

Order项目

pom.xml内容:

 

   <parent>

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

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

<version>2.0.2.RELEASE</version>

</parent>

     

    <properties>

        <java.version>1.8</java.version>

        <spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>

    </properties>

    

    

    <dependencies>

    

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

 

<dependency>

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

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

</dependency>

 

 

      <dependency>

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

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

<scope>test</scope>

</dependency>

    </dependencies>

 

    <dependencyManagement>

        <dependencies>

            <dependency>

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

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

                <version>${spring-cloud.version}</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

        </dependencies>

    </dependencyManagement>

    

  <repositories>

<repository>

<id>spring-snapshots</id>

<name>Spring Snapshots</name>

<url>https://repo.spring.io/libs-snapshot</url>

<snapshots>

<enabled>true</enabled>

</snapshots>

</repository>

<repository>

<id>spring-milestones</id>

<name>Spring Milestones</name>

<url>https://repo.spring.io/libs-milestone</url>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

<repository>

<id>spring-releases</id>

<name>Spring Releases</name>

<url>https://repo.spring.io/libs-release</url>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

</repositories>

 

    <build>

        <plugins>

            <plugin>

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

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>

yml文件内容:

server:

  port: 9101

 

eureka:

  instance:

    hostname: localhost

  client:

    serviceUrl:

      defaultZone: http://${eureka.instance.hostname}:9000/eureka/

spring:

  application:

    name: OrderServer

启动类:

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

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

import org.springframework.cloud.openfeign.EnableFeignClients;

 

@SpringBootApplication

@EnableEurekaClient

@EnableFeignClients

public class Order {

public static void main(String[] args) {

SpringApplication.run(Order.class, args);

 

}

}

因为feign是客户端调用所以我们创建controller

我们现在是order应用去调用user应用,那么需要在order应用中去添加feign的jar与对应的接口代码如下:

 

import org.springframework.cloud.openfeign.FeignClient;

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

 

@FeignClient("UserServer")

public interface UserService {

 

@GetMapping("/getUserInfo")

public String getInfo();

 

}

@FeignClient()使用这个注解 这里面需要填相对应的应用名称,也就是yml中配置的

spring:

  application:

    name: UserServer

 

当然别忘了在 user中添加对应的controller哦。

 

下面整合zuul网关:

pom.xml文件内容:

 

   <parent>

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

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

<version>2.0.2.RELEASE</version>

</parent>

     

    <properties>

        <java.version>1.8</java.version>

        <spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>

    </properties>

    

    

    <dependencies>

    

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

 

<dependency>

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

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

</dependency>

 

      <dependency>

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

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

<scope>test</scope>

</dependency>

    </dependencies>

 

    <dependencyManagement>

        <dependencies>

            <dependency>

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

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

                <version>${spring-cloud.version}</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

        </dependencies>

    </dependencyManagement>

    

  <repositories>

<repository>

<id>spring-snapshots</id>

<name>Spring Snapshots</name>

<url>https://repo.spring.io/libs-snapshot</url>

<snapshots>

<enabled>true</enabled>

</snapshots>

</repository>

<repository>

<id>spring-milestones</id>

<name>Spring Milestones</name>

<url>https://repo.spring.io/libs-milestone</url>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

<repository>

<id>spring-releases</id>

<name>Spring Releases</name>

<url>https://repo.spring.io/libs-release</url>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

</repositories>

 

    <build>

        <plugins>

            <plugin>

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

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>

yml文件:

 

server:

  port: 9300

 

eureka:

  instance:

    hostname: localhost

  client:

    serviceUrl:

      defaultZone: http://${eureka.instance.hostname}:9000/eureka/

spring:

  application:

    name: Zuul

    

zuul:

  routes:

    UserServer:

      path: /userApi/**

      serviceId: UserServer

      #strip-prefix: false

    OrderServer:

      path: /orderApi/**

      serviceId: OrderServer

      #strip-prefix: false

启动类:

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;

 

@SpringBootApplication

@EnableEurekaClient

@EnableZuulProxy

public class Zuul {

public static void main(String[] args) {

SpringApplication.run(Zuul.class, args);

 

}

}

项目结构:

效果:

我们把所有服务器都都启动起来顺序是:注册中心,订单,用户,网关服务顺序。

注册中心地址:http://localhost:9000/

看到我们的注册中心各种服务状态

如果出现以下错误,不要慌,是因为zuul网关加载需要时间 多刷新几次即可。

 

 

特别说明:strip-prefix默认为true,如果不想要前缀,可以设置为false 。

 

总结: 1、eureka相当于一个服务中心,所有的应用都需要注册到这个中心。

            2、zuul网关的作用是统一入口,微服务拆分这么多端口,记不住。

            3、fegin其实是通过http请求客户端的方式去相互调用。

 

做技术最难能可贵的就是持续的学习,吸收知识,不断的思考形成自己的理解和模式。

欢迎参与讨论QQ群:600922504

 

 

以上是 springcloud之eureka+feign+zuul基于boot2.0与cloudF版本搭建案例 的全部内容, 来源链接: utcz.com/z/512578.html

回到顶部