现在最流行的网站推广方式有哪些,阳江房产网58同城,建筑网址大全,跨平台app开发框架在微服务架构中#xff0c;需要几个关键的组件#xff0c;服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等#xff0c;由这几个组件可以组建一个简单的微服务架构。客户端的请求首先经过负载均衡#xff08;zuul、Ngnix#xff09;#xff0c;再到达服…在微服务架构中需要几个关键的组件服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等由这几个组件可以组建一个简单的微服务架构。客户端的请求首先经过负载均衡zuul、Ngnix再到达服务网关zuul集群然后再到具体的服务服务统一注册到高可用的服务注册中心集群服务的所有的配置文件由配置服务管理下一篇文章讲述配置服务的配置文件放在Git仓库方便开发人员随时改配置。 1. Zuul介绍
Zuul的主要功能是路由和过滤器。路由功能是微服务的一部分比如api/user映射到user服务/api/shop映射到shop服务。zuul实现了负载均衡。以下是微服务结构中Zuul的基本流程。在接下来的步骤中我们来创建一个zuul服务 将/api-feign/**映射到我们之前创建feign-service, 将/api-ribbon/**映射到之前的ribbon-service服务。 2. 创建Zuul的Maven工程其中关于zuul的依赖是
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-zuul/artifactId
/dependency 完整pom.xml如下 ?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcm.chry/groupIdartifactIdspring.helloworld.zuul.service/artifactIdversion0.0.1-SNAPSHOT/versionnamespring.helloworld.zuul.service/namedescriptionzuul service demo/descriptionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion1.5.3.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingjava.version1.8/java.version/propertiesdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-eureka/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-zuul/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversionDalston.RC1/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/buildrepositoriesrepositoryidspring-milestones/idnameSpring Milestones/nameurlhttps://repo.spring.io/milestone/urlsnapshotsenabledfalse/enabled/snapshots/repository/repositories/project 3. 创建启动类: 使用EnableZuulProxy注解 package spring.helloworld.zuul.service;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;EnableZuulProxyEnableEurekaClientSpringBootApplicationpublic class ServiceZuulApplication {public static void main(String[] args) {SpringApplication.run(ServiceZuulApplication.class, args);}}
4. 编写zuul服务配置
简单配置两个路由 一个路由到ribbon一个路由到feign 由于都注册到eureka服务中心所以都用通过serviceId来发现服务具体地址 path是路由的地址映射关系 eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/server:port: 8904spring:application:name: service-zuulzuul:routes:ribbo:path: /api-ribbon/**serviceId: service-ribbonfeign:path: /api-feign/**serviceId: service-feign
这时启动zuul服务 然后访问http://localhost:8904/api-ribbon可直接路由到http://localhost:8901/.
http://localhost:8904/api-feign/hello可路由到http://localhost:8902/hello
5. Zuul过滤器
zuul还提供了过滤功能 只要实现接口ZuulFilter即可对请求先进行筛选和过滤之后再路由到具体服务。 package spring.helloworld.zuul.service;import javax.servlet.http.HttpServletRequest;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;Componentpublic class DemoFilter extends ZuulFilter {private static Logger log LoggerFactory.getLogger(DemoFilter.class);Overridepublic String filterType() {return pre;}Overridepublic int filterOrder() {return 0;}Overridepublic boolean shouldFilter() {return true;}Overridepublic Object run() {RequestContext ctx RequestContext.getCurrentContext();HttpServletRequest request ctx.getRequest();String s String.format(%s %s, request.getMethod(), request.getRequestURL().toString());log.info(s);return null;}}
filterType返回一个字符串代表过滤器的类型在zuul中定义了四种不同生命周期的过滤器类型具体如下
pre路由之前routing路由之时post 路由之后error发送错误调用
filterOrder过滤的顺序
pre路由之前routing路由之时post 路由之后error发送错误调用
shouldFilter这里可以写逻辑判断是否要过滤本文true,永远过滤。
run过滤器的具体逻辑这里只是将请求的URL简单些到日志中