SpringCloud从入门到进阶(三)——路由接入Zuul

内容

  SpringBoot整合SpringCloud的Eureka、Zuul等组件,快速实现简单易懂且具有服务熔断、负载均衡的分布式架构1.0,体验微服务的魅力。

版本

  IDE:IDEA 2017.2.2 x64

  JDK:1.8.0_171

  manve:3.3.3

  SpringBoot:1.5.9.RELEASE

  SpringCloud:Dalston.SR1

适合人群

  ?Java开发人员

说明

  转载请说明出处:SpringCloud从入门到进阶(三)——路由接入Zuul

参考

Linux入门实践笔记(二)--Jar包运行与关闭

SpringCloud从入门到进阶(二)——注册中心Eureka

步骤

项目路径

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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud</artifactId>
        <groupId>com.leo</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>gateway-service-7081-7082</artifactId>
?
    <dependencies>
        <!--zuul组件实现网关的路由转发和负载均衡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>
        <!--eureka client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!--actuator监控-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

    <!-- Spring Boot的Maven插件,使用Maven插件的方式来启动Spring Boot工程
    如果不添加该插件在使用mvn命令打包的jar有问题,执行时会报错:xxx.jar中没有主清单属性-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
yaml

?   本示例暂不配置Zuul的高可用,peer2的配置注释掉。

spring:
  application:
   name: application-gatewayservice
  profiles:
   active: peer1
?
#Zuul的配置
zuul:
  prefix: /jms  #通过zuul.prefix的配置,所有请求统一增加前缀,可以实现API接口的版本号控制,注意前缀要加/
  #如果某服务存在多个实例,Zuul结合Ribbon会做负载均衡,将请求均分的部分路由到不同的服务实例。
  routes:
   culturalService:  #此处的名称是用户自定义的,需要指定它的path和serviceld,两者配合使用,就可以将指定类型的请求Uri路由到指定的Serviceld
     path: /cultural/**    #以/cultural/** 开头的请求都转发给springcloud-culturalService
     serviceId: application-culturalService  #此处是spring的applicationname,即Eureka的服务名,而非instance-id 实例名。
   idleTimeService:
     path: /idleTime/**
     serviceId: application-idleTimeService
   idleGoodService:
     path: /idleGood/**
     serviceId: application-idleGoodService
   topicService:
     path: /topic/**
     serviceId: application-topicService
   publicWelfareService:
     path: /publicWelfare/**
     serviceId: application-publicWelfareService
   commonService:
     path: /common/**
     serviceId: application-commonService
#指明日志存放位置
logging:
  file: logs/application-gatewayservice-${server.port}.logs
?
eureka:
  client:
   service-url:
     defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
---
spring:
  profiles: peer1
server:
  port: 7081
?
?
eureka:
  instance:
   instance-id: springcloud-gatewayservice-7081
?
management:
  port: 7181
  security:
   enabled: false
#---
#spring:
#  profiles: peer2
#server:
#  port: 7082
#
#management:
#  port: 7182
#  security:
#   enabled: false
#
#eureka:
#  instance:
#   instance-id: springcloud-gatewayservice-7082
SpringApplication
@EnableZuulProxy //开启Zuul的功能
@SpringBootApplication
@EnableEurekaClient
public class GatewayServiceApplicaton {
    public static void main(String[] args) {
        SpringApplication.run(GatewayServiceApplicaton.class,args);
   }
}
logback-spring.xml
<!-- 加载日志文件 -->
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include  resource="org/springframework/boot/logging/logback/base.xml"/>
    <jmxConfigurator/>
</configuration>
Zuul断路器
@Component
public class MyFallbackProvider implements ZuulFallbackProvider {
?
    /**
     * getRoute()方法,用于指定熔断功能应用于哪些路由的服务。
     * 如果需要所有的路由服务都加熔断功能,只需要在getRoute()方法上返回"*"的匹配符,
     */
    @Override
    public String getRoute() {
        return "*"; //所有路由服务都增加熔断。
   }
?
    /**
     * fallbackResponse()为进入熔断功能时执行的逻辑
     */
    @Override
    public ClientHttpResponse fallbackResponse() {
        return new ClientHttpResponse() {
            @Override
            public HttpStatus getStatusCode() throws IOException {
                return HttpStatus.SERVICE_UNAVAILABLE;
           }
?
            @Override
            public int getRawStatusCode() throws IOException {
                return 503;
           }
?
            @Override
            public String getStatusText() throws IOException {
                return "Service_Fallbcak";
           }
?
            @Override
            public void close() {
?
           }
?
            @Override
            public InputStream getBody() throws IOException {
                return new ByteArrayInputStream("您好,服务出现故障,请重试。".getBytes("utf-8"));
           }
?
            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
                return headers;
           }
       };
   }
}
项目打包

  在命令行工具中进入项目pom文件所在路径,然后执行mvn clean package打包。

  过程可参考:SpringCloud从入门到进阶(二)——注册中心Eureka

拷贝

  使用Bitvise SFTP或WinSCP等工具将jar包上传到有公网的服务器,再使用scp命令将jar包拷贝到路由接入服务器普通用户的~/jars路径下。

  过程可参考:SpringCloud从入门到进阶(二)——注册中心Eureka

修改hosts文件

  将内部域名eureka7001.com、eureka7002.com、eureka7003.com绑定到局域网IP 172.26.125.118,将gateway7081.com绑定到局域网IP 172.26.125.117。并将微服务的主机名绑定到对应的局域网IP(不加会出现无法路由的问题,详见第4节)。

?  修改/etc/hosts,添加hostname对应的ip地址

#IP     域名      别名
[[email protected] jars]$ sudo vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.26.125.118   eureka7001.com
172.26.125.118   eureka7002.com
172.26.125.118   eureka7003.com
127.0.0.1   gateway7081.com
#不加会出现无法路由的问题,详见系列文章第(四)节
172.26.125.113  iz8vb6a56ld0vy6vuaijriz
172.26.125.111  iz8vb6a56ld0vy6vuaijrjz

  重启网卡

[[email protected] jars]$ sudo /etc/rc.d/init.d/network restart
Restarting network (via systemctl):                       [  OK  ]

  进行ping测试

[[email protected] jars]$  ping eureka7001.com
PING eureka7001.com (172.26.125.118) 56(84) bytes of data.
64 bytes from eureka7001.com (172.26.125.118): icmp_seq=1 ttl=64 time=0.143 ms
64 bytes from eureka7001.com (172.26.125.118): icmp_seq=2 ttl=64 time=0.149 ms
[[email protected] jars]$ ping gateway7081.com
PING gateway7081.com (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.015 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.023 ms
#可见访问本机和访问局域网的网络延迟差1个数量级。
启动与测试
[[email protected] jars]$ java -jar gateway-service-7081-7082-1.0-SNAPSHOT.jar  --spring.profiles.active=peer1 &

  访问eureka服务器

  使用postman请求API,由于微服务还未部署,因此请求对应接口会报503错误(服务熔断)。

关闭

  关闭java程序请参考:Linux入门实践笔记(二)--Jar包运行与关闭

原文地址:https://www.cnblogs.com/lonelyJay/p/9842061.html

时间: 2024-09-29 07:03:49

SpringCloud从入门到进阶(三)——路由接入Zuul的相关文章

SpringCloud从入门到进阶(四)——使用SpringBoot搭建微服务

内容 SpringBoot整合SpringCloud的Eureka.Zuul等组件,快速实现简单易懂且具有服务熔断.负载均衡的分布式架构1.0,体验微服务的魅力. 版本 IDE:IDEA 2017.2.2 x64 JDK:1.8.0_171 manve:3.3.3 SpringBoot:1.5.9.RELEASE SpringCloud:Dalston.SR1 适合人群 ?Java开发人员 说明 转载请说明出处:SpringCloud从入门到进阶(四)--使用SpringBoot搭建微服务 参考

SpringCloud从入门到进阶(四)——生产环境下Eureka的完全分布式部署

内容 由于前两节的内容我们知道,开启了preferIpAddress后,Eureka的伪分布式部署会提示replica不可用.这一节我们讲解如何在生产环境下部署完全分布式的Eureka集群,确保开启了preferIpAddress后replica的可用性. 版本 IDE:IDEA 2017.2.2 x64 JDK:1.8.0_171 manve:3.3.3 SpringBoot:1.5.9.RELEASE SpringCloud:Dalston.SR1 适合人群 Java开发人员 节点信息: 节

SQL Server AlwaysON从入门到进阶(1)——何为AlwaysON?

本文属于SQL Server AlwaysON从入门到进阶系列文章 本文原文出自Stairway to AlwaysOn系列文章.根据工作需要在学习过程中顺带翻译以供参考.系列文章包含: SQL Server AlwaysON从入门到进阶(1)--何为AlwaysON? SQL Server AlwaysON从入门到进阶(2)--存储 SQL Server AlwaysON从入门到进阶(3)--基础架构 SQL Server AlwaysON从入门到进阶(4)--分析和部署Windows Ser

微服务SpringCloud+Docker入门到高级实战

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧2.技术选型和学后水平简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构简介:讲解单机应用和分布式应用架构演进基础知识 (画图)2.微服务核心基础讲解简介:讲解微服务核心知识 :网关.服务发现注册.配置中心.链路追踪.负载均衡器.熔断3.常见的微服务框架简介:讲解常用的微服务框架4.微服务下

Springcloud使用入门

Springcloud是一款微服务框架,它基于Springboot,可以使用它用来管理纵向拆分的项目,将一个个的小项目变成微服务.下面简单的搭建一个微服务,使用eureka组件实现注册中心,使用ribbon组件实现微服务调用,使用zuul网关实现真实服务地址和访问地址的分离,其他技术后续补充. springcloud和nginx 前面学习过nginx,它除了可以实现动静分离,还可以实现负载均衡,即可以将项目做成分布式tomcat集群,前端访问可以随机或者按照权重值访问后端服务.但是nginx有一

iptables入门到进阶

Iptables入门到进阶 一.前言 Firewall(防火墙): 隔离工具:Packets Filter Firewall(包过滤防火墙):工作于主机或网络的边缘,对经由的报文根据预先定义的规则(匹配条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件: 防火墙类型 从防火墙的实现形式来分的话,防火墙可以分为软件防火墙和硬件防火墙 硬件防火墙:在硬件级别实现部分功能的防火墙:另一个部分功能基于软件实现: 软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙: 从防火

Wireshark入门与进阶---数据包捕获与保存的最基本流程

Wireshark入门与进阶系列(一) 本文由CSDN-蚍蜉撼青松 [主页:http://blog.csdn.net/howeverpf]原创,转载请注明出处! 你在百度上输入关键字"Wireshark.使用.教程",可以找到一大堆相关的资料.那么问题来了, 为什么我还要写这个系列的文章? 前面你能搜到的那些资料,大部分可能存在两个小问题: 网上大部分资料引自(or译自)Wireshark官方的用户手册,或使用类似于用户手册的写法,它们很详细的告诉你Wireshark有哪些窗口.菜单.

SQL Server AlwaysON从入门到进阶(2)——存储

本文属于SQL Server AlwaysON从入门到进阶系列文章 前言: 本节讲解关于SQL Server 存储方面的内容,相对于其他小节而言这节比较短.本节会提供一些关于使用群集或者非群集系统过程中对存储的利用建议.当然,重点还是集中在对于一个标准的AlwaysOn可用组配置过程中,对存储的选择和配置上面. AlwaysOn的部署首先建立在一个Windows Server Failover Cluster(WSFC)上.并且每个服务器通常有一个独立的SQL Server实例.另外,每个服务器

服务端工程师入门与进阶 Java 版

前言 欢迎加入我们.这是一份针对实习生/毕业生的服务端开发入门与进阶指南.遇到问题及时问你的 mentor 或者直接问我. 建议: 尽量用google查找技术资料. 有问题在stackoverflow找找,大部分都已经有人回答. 多看官方的技术文档. ibm developerworkers的文章质量整体上有保障. 平时花一些时间在github上阅读优秀项目源码. 入门(1-2 个月) 目标:参与简单的项目开发. 技能: 掌握 Java.经典的<Java 核心技术:卷1 基础知识>(或者<