专栏首页带你回家springcloud 之eureka+feign+zuul 基于boot2.0与cloud F版本搭建案例

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

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请求客户端的方式去相互调用。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Springboot +redis 实现session共享

    用一个容器保存 session,就能共享了。容器可以是数据库,缓存,文件等。当然这里性能最高的还是

    斯文的程序
  • Windows环境 springboot+dubbo+zookerper 实现相互调用

    windows环境springboot+dubbo+zookerper实现相互调用

    斯文的程序
  • java 使用quartz 定时xml 配置 与注解 以及注意事项

    请参考:http://blog.csdn.net/tanyongbing1988/article/details/45689987

    斯文的程序
  • SpringCloud-消息总线bus

      SpringCloud Bus集成了市面上常用的消息中间件(rabbit mq,kafka等),连接微服务系统中的所有的节点,当有数据变更的时候,可以通过消...

    用户4919348
  • 消息总线

    SpringCloudBus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。 在上一...

    dalaoyang
  • 【ssm个人博客项目实战01】SSM环境搭建1、ssm系统架构2、项目整合

    maven是一个优秀的项目对象管理器工具 我可以通过在pom.xml中添加需要的jar包的依赖就可以导入对应的jar包了,非常的方便。 下面就列出整合ssm所...

    yukong
  • 跟我学Spring Cloud(Finchley版)-02-构建分布式应用

    本书使用服务提供者与服务消费者来描述微服务之间的调用关系。下表解释了服务提供者与服务消费者。

    用户1516716
  • 服务链路跟踪 && 服务监控

    微服务以微出名,在实际的开发过程中,涉及到成百上千个服务,网络请求引起服务之间的调用极其复杂。

    Noneplus
  • SpringCloud-分布式配置中心【动态刷新】

    案例代码:https://github.com/q279583842q/springcloud-e-book   本文我们来讨论下如何在配置中心的信息被改变的...

    用户4919348
  • Spring cloud stream【入门介绍】

    案例代码:https://github.com/q279583842q/springcloud-e-book

    用户4919348

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动