网关程序的开发
发布日期:2021-05-07 00:29:54 浏览次数:9 分类:技术文章

本文共 3548 字,大约阅读时间需要 11 分钟。

出现问题

问题1:pom.xml中有标红

解决方法:等一下就好了,它之前可能没有下载完成

问题2:Zull无法注册到Eureka Server中

解决方法:是因为在application.yml文件中http都写成了https

主要工作

1.只使用单节点的Eureka Server

2.新建模块

3.配置pom.xml文件

imooc-ad
com.imooc.ad
1.0-SNAPSHOT
4.0.0
ad-gateway
1.0-SNAPSHOT
jar
ad-gateway
ad-gateway
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-zuul
org.springframework.boot
spring-boot-maven-plugin
8
8

4.编写网关启动程序

package com.imooc.ad;@EnableZuulProxy@SpringCloudApplicationpublic class ZuulGatewayApplication {    public static void main(String[] args){        SpringApplication.run(ZuulGatewayApplication.class,args);    }}

5.编写配置文件yml

server:  port: 9000spring:  application:    name: ad-gatewayeureka:  client:    server-url:      defaultZone: http://server1:8000/eureka

6.自定义网关过滤器

(1)新建包

(2)新建PreRequestFilter

package com.imooc.ad.filter;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import com.netflix.zuul.exception.ZuulException;import lombok.extern.slf4j.Slf4j;import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;import org.springframework.stereotype.Component;@Slf4j@Componentpublic class PreRequestFilter extends ZuulFilter {    @Override    public String filterType() {        return FilterConstants.PRE_TYPE;    }    @Override    public int filterOrder() {        return 0;    }    @Override    public boolean shouldFilter() {        return true;    }    @Override    public Object run() throws ZuulException {        RequestContext ctx = RequestContext.getCurrentContext();        ctx.set("startTime",System.currentTimeMillis());        return null;    }}

(3)新建AccessLogFilter(POST类型的Filter)

package com.imooc.ad.filter;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import com.netflix.zuul.exception.ZuulException;import lombok.extern.slf4j.Slf4j;import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;@Slf4j@Componentpublic class AcessLogFilter extends ZuulFilter {    @Override    public String filterType() {        return FilterConstants.POST_TYPE;    }    @Override    public int filterOrder() {        return FilterConstants.SEND_RESPONSE_FILTER_ORDER - 1;//系统的最后一个 post 过滤器执行之前    }    @Override    public boolean shouldFilter() {        return true;    }    @Override    public Object run() throws ZuulException {        RequestContext ctx = RequestContext.getCurrentContext();        HttpServletRequest  request = ctx.getRequest();        Long startTime = (Long)ctx.get("startTime");        String url = request.getRequestURI();        long duration = System.currentTimeMillis() - startTime;        log.info("url: " + url + ": duration" + duration / 100 + "ms");        return null;    }}

7.启动Eureka Server

8.启动网关

9.服务注册成功

 

上一篇:SpringCloud与Eureka,Feign,Ribbon,Hystrix,Zuul核心组件间的关系
下一篇:REST相关知识

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年03月30日 14时23分00秒