当前位置: 首页 > 编程日记 > 正文

springCloud Zuul网关

1.springboot 仅2.0.x 支持,在此选择 2.0.7

2.新建Module eureka-zuul-client

3.导入依赖

<?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"><modelVersion>4.0.0</modelVersion><parent><groupId>com.hc</groupId><artifactId>demoparent</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><artifactId>eureka-zuul-client</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 引入关于 eureka-server的依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>2.0.2.RELEASE</version></dependency><!--引入网关 zuul依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId><version>2.0.2.RELEASE</version></dependency><!--运行状态监控--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--mybatis配置 start--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.2.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.39</version></dependency><!--mybatis配置 end--></dependencies>
</project>

4.启动类加上注解

@EnableEurekaClient
@EnableZuulProxy

5.增加配置文件application.yml

server:port: 8767
spring:main:allow-bean-definition-overriding: truedatasource:url: jdbc:mysql://192.168.9.1:3306/test1?useUnicode=true&characterEncoding=utf8username: rootpassword: 123456driver-class-name: com.mysql.jdbc.Driverapplication:name: eureka-zuul-client
eureka:client:#改变eureka server的检查方式,使用actuator 的health进行检查,可能会检查到数据库healthcheck:enabled: trueservice-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: trueinstanceId: ${spring.application.name}:${server.port}# 每隔10s发送一次心跳lease-renewal-interval-in-seconds: 10# 告知服务端30秒还未收到心跳的话,就将该服务移除列表lease-expiration-duration-in-seconds: 30#改变eureka 服务端的 status 状态跳转查看页面status-page-url-path: /actuator/health
management:endpoints:web:exposure:include: "*"server:port: 10116servlet:context-path: /ssl:enabled: falseendpoint:health:show-details: always
zuul:routes:zuulHello:path: /zuulHello/**serviceId: eureka-clientribbonHello:path: /ribbonHello/**serviceId: eureka-ribbon-clientfeignHello:path: /feignHello/**serviceId: eureka-feign-clientprefix: /v1

6.增加zuul熔断器

代码:

package com.example.eurekazuulclient.hystrixList;import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.stereotype.Component;import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;@Component
public class MyFallbackProvider implements FallbackProvider {@Overridepublic String getRoute() {//return "eureka-client";return "*";}@Overridepublic ClientHttpResponse fallbackResponse(String route, Throwable cause) {return new ClientHttpResponse() {@Overridepublic HttpStatus getStatusCode() throws IOException {return HttpStatus.OK;}@Overridepublic int getRawStatusCode() throws IOException {return 200;}@Overridepublic String getStatusText() throws IOException {return "OK";}@Overridepublic void close() {}@Overridepublic InputStream getBody() throws IOException {return new ByteArrayInputStream("fallback".getBytes());}@Overridepublic HttpHeaders getHeaders() {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);return headers;}};}
}//end

7.增加zuul 过滤器

pre

package com.example.eurekazuulclient.filter;import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Component
public class MyFilter_pre extends ZuulFilter {@Overridepublic String filterType() {/*** pre 代表请求被路由前执行*/return "pre";}@Overridepublic int filterOrder() {/*** 过滤器执行的顺序 越小越靠前*/return 0;}@Overridepublic boolean shouldFilter() {/*** 判断过滤器是否执行*/return true;}@Overridepublic Object run() throws ZuulException {RequestContext currentContext = RequestContext.getCurrentContext();HttpServletRequest request = currentContext.getRequest();System.out.println("pre send " + request.getMethod() + " Request to " + request.getRequestURL().toString());//int i = 1 / 0;String token = request.getParameter("token");if (StringUtils.isBlank(token)) {System.out.println("access token is empty");currentContext.setSendZuulResponse(false);currentContext.setResponseStatusCode(401);try {HttpServletResponse response = currentContext.getResponse();response.setCharacterEncoding("utf-8");  //设置字符集response.setContentType("text/html; charset=utf-8"); //设置相应格式response.getWriter().write("token 验证失败");} catch (IOException e) {System.out.println("response io异常");e.printStackTrace();}return null;}return null;}
}//end

post

package com.example.eurekazuulclient.filter;import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;@Component
public class MyFilter_post extends ZuulFilter {@Overridepublic String filterType() {/*** post 它是在请求己被路由到微服务后执行的 般情况下,用作收集统计* 信息、指标,以及将响应传输到客户端*/return "post";}@Overridepublic int filterOrder() {/*** 过滤器执行的顺序 越小越靠前*/return 0;}@Overridepublic boolean shouldFilter() {/*** 判断过滤器是否执行*/return true;}@Overridepublic Object run() throws ZuulException {RequestContext currentContext = RequestContext.getCurrentContext();HttpServletRequest request = currentContext.getRequest();System.out.println("post send " + request.getMethod() + " Request to " + request.getRequestURL().toString());return null;}
}//end

error

package com.example.eurekazuulclient.filter;import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Component
public class MyFilter_error extends ZuulFilter {@Overridepublic String filterType() {/*** error 在其他过滤器发生错误时执行*/return "error";}@Overridepublic int filterOrder() {/*** 过滤器执行的顺序 越小越靠前*/return 0;}@Overridepublic boolean shouldFilter() {/*** 判断过滤器是否执行*/return true;}@Overridepublic Object run() throws ZuulException {RequestContext currentContext = RequestContext.getCurrentContext();HttpServletRequest request = currentContext.getRequest();System.out.println("error send " + request.getMethod() + " Request to " + request.getRequestURL().toString());try {HttpServletResponse response = currentContext.getResponse();response.setCharacterEncoding("utf-8");  //设置字符集response.setContentType("text/html; charset=utf-8"); //设置相应格式response.getWriter().write("error 验证失败");} catch (IOException e) {System.out.println("response io异常");e.printStackTrace();}return null;}
}//end

routing

package com.example.eurekazuulclient.filter;import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;@Component
public class MyFilter_routing extends ZuulFilter {@Overridepublic String filterType() {/*** routing 它用于将请求路由到具体的微服务实例。在默认情况下,它使用* Http Client 进行网络请求。*/return "routing";}@Overridepublic int filterOrder() {/*** 过滤器执行的顺序 越小越靠前*/return 0;}@Overridepublic boolean shouldFilter() {/*** 判断过滤器是否执行*/return true;}@Overridepublic Object run() throws ZuulException {RequestContext currentContext = RequestContext.getCurrentContext();HttpServletRequest request = currentContext.getRequest();System.out.println("routing send " + request.getMethod() + " Request to " + request.getRequestURL().toString());return null;}
}//end

7.依次启动,eureka-server  eureka-client-01  eureka-client  eureka-feign-client  eureka-ribbon-client  eureka-zuul-client

访问 http://192.168.9.6:8767/v1/zuulHello/hello?token=123 显示

访问 http://192.168.9.6:8767/v1/ribbonHello/hello?token=123 显示

访问 http://192.168.9.6:8767/v1/feignHello/hello 显示

转载于:https://www.cnblogs.com/hcfan/p/10161059.html

相关文章:

f-free 查看系统中空闲和使用的内存

文章目录前言语法格式以指定单位显示内存占用情况打印所有内存占用&#xff08;RAM SWAP&#xff09;打印间隔以及次数打印所有的列&#xff08;将buff和cache分开&#xff09;free各个空间含义swap交换空间cache页高速缓存free 与 available前言 free 支持查看空闲的和已使用…

对比两个同类型的泛型集合并返回差异泛型集合 ——两个List类名的比较

1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam name"T">泛型类型</typeparam> 5: /// <param name"newModel">修改后的数据集合</param> 6: /// &…

php insert failed,较大的MySQL INSERT语句导致PHP错误

好吧,我正在编写代码,但是发生了一些奇怪的事情,我不认为我的代码是错误的…但是它仍在垂死,我不知道为什么…有错误&#xff1a;Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use …

js 取得文件大小

document.getElementById("file").files[0].size

Spring Boot thymeleaf模版支持,css,js等静态文件添加

Thymeleaf引入 Thymeleaf是一个Java模板引擎开发库&#xff0c;可以处理和生成HTML、XML、JavaScript、CSS和文本&#xff0c;在Web和非Web环境下都可以正常工作。 1.添加依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>…

s-sed(stream editor) 文本填充和编辑 基本使用

文章目录前言语法格式sed 操作地址sed子命令sed正则表达式sed使用实例打印命令 p删除命令 d替换命令 s指定操作地址的范围 逗号 ,多重编辑命令 e下行插入命令 a上行插入命令 i修改命令 c获取下一行命令 n转换命令 y退出命令 q总结前言 sed是一个“非交互”式的字符流编辑器&am…

c语言动态迁移mysql,flask-migrate动态迁移数据库

了解flask_migrate需要先了解flask-script&#xff0c;那么flask-script的作用是什么呢&#xff1f;flask-script的作用是可以通过命令行的形式来操作Flask。例如通过命令跑一个开发版本的服务器、设置数据库&#xff0c;定时任务等。2.执行pip install flask-script来进行安装…

软考之路-网络攻击:主动攻击和被动攻击

被动攻击(针对路上的东西下手) 概念&#xff1a;就是网络窃听&#xff0c;窃取数据包并进行分析&#xff0c;从中窃取重要的敏感信息 措施&#xff1a;防止被动攻击的主要手段是数据加密传输 主动攻击(针对计算机下手) 概念&#xff1a;包括窃取、篡改、假冒和破坏 措施&#x…

edge.js架起node.js和.net互操作桥梁

今天要介绍的是edge.js这个github上刚兴起的开源项目&#xff0c;它可以让node.js和.net之间在in-process下互操作。.net版本在4.5及以上&#xff0c;因为.net4.5带来的Task&#xff0c;asyn&#xff0c;await关键字和node.js的Event模型正好匹配。如果你感兴趣的话&#xff0c…

connect() failed (111: Connection refused) while connecting to upstream, cli

php-fpm没有运行 执行如下命令查看是否启动了php-fpm&#xff0c;如果没有则启动你的php-fpm即可 netstat -ant | grep 9000没有运行为空&#xff0c;有运行显示 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 启动方法 sudo /usr/loca…

C++的STL 栈实现 判断栈的出栈顺序是否合理

有这样的题目&#xff1a; 已知从1至n的数字序列&#xff0c;按顺序入栈&#xff0c;每个数字入栈后即可出栈&#xff0c; 也可在栈中停留&#xff0c;等待后面的数字入栈出栈后&#xff0c;该数字再出栈&#xff0c;求该数字序列的出栈序列是否合法? 类似如下&#xff1a; 已…

fire.php,Fire PHP

项目介绍&#xff1a; Fire PHP 是基于 PHP JavaScript开发的跨平台的Firefox 的扩充套件&#xff0c;即PHP调试插件&#xff0c;可以帮你debug 后端PHP 的程式&#xff0c;其使用的技术跟某些IDE 一样&#xff0c;要求你在写程式时加入一些追踪用的代码。通过使用Firephp你可以…

json_encode时中文编码转正常状态

function json_encode_cn($data) {$data json_encode($data);return preg_replace("/\\\u([0-9a-f]{4})/ie", "iconv(UCS-2, UTF-8, pack(H*, $1));", $data); }直接json_encode()函数 ["\u6fb3\u5927\u5229\u4e9e","\u8056\u8a95\u5cf6&q…

验证URL链接和IP有效性的JS代码(正则表达式)

千里之行&#xff0c;始于足下&#xff0c;因之前毕业设计的耽误&#xff0c;没能在博客园记录我的程序猿体会&#xff0c;稍有遗憾&#xff0c;这么多的时间&#xff0c;我竟让他转瞬而过&#xff01;但没关系&#xff0c;再次出发&#xff0c;勿忘为什么出发&#xff01; 一下…

[转帖]什么是光纤的波长?看看有哪些是你不知道的!

什么是光纤的波长&#xff1f;看看有哪些是你不知道的&#xff01; FShttps://www.feisu.com/bbs/e-1640.html2017-07-01 00:00:001084我们平时最熟悉的光当然是我们肉眼所能看见的光。我们的眼睛对波长在400nm的紫光到700nm的红光很敏 感。但对于携带玻璃纤维的光纤&#xff0…

C++的STL 栈 实现四则运算

使用栈实现四则运算&#xff0c;支持&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;(&#xff0c;) 输入为字符串&#xff0c;输出为计算好的数值&#xff0c;如不符合四则运算的规定&#xff0c;则异常退出 这个实现借用了栈以及字符处理状态机的思想&#xff1a; 维…

javascript小数相减会出现一长串的小数位数的原因

javascript小数相减会出现一长串的小数位数的原因 <script>var a38.8;var b6.8;alert(parseFloat(a)-parseFloat(b));var a134.22;var b6;alert(a*b);</script>以上代码为什么产生一长串小数位出来&#xff0c;虽然比较精确&#xff0c;可没必要呀。这个和数据结构…

Java孩子父母类,@Output孩子和父母之间的沟通 . 角2(5)

我正在尝试学习角度2&#xff0c;并且我正在尝试使用来自我的子组件的数据在父组件中设置变量 . 基本上我在父视图中有一个子 Headers &#xff0c;我希望 Headers 和一些HTML根据加载的子项进行更改 .父组件&#xff1a;import { Component, OnInit, ViewEncapsulation } from…

SQL 自学笔记1(W3School)

自学W3Schoolhttp://www.w3school.com.cn/sql/index.asp 简介 SQL是什么&#xff1f; Structured Query Language 结构化的查询语言 SQL能做什么&#xff1f; 面向数据库查询、取出数据、插入新数据、更新数据、删除数据在数据库中建立库、表&#xff1b;创建存储过程及视图可设…

BZOJ 1096: [ZJOI2007]仓库建设

传送门 斜率优化DP入门题 显然如果在一个位置 i 建一个仓库&#xff0c;且上一个仓库位置为 j 那么从 j1到 i 的物品显然都要存在 i 仓库是最优的 设 $f [ i ]$ 表示在第 i 个工厂建设仓库时&#xff0c;工厂 1 到 i 的物品都转移好的最小花费 考虑上一个仓库的位置 j 设工厂 i…

C++的STL 堆 实现获取数组堆第K大的数

前言 堆数据结构 使用的是优先级队列实现&#xff0c;创建堆的时候需要指定堆中元素的排列方式&#xff0c;即最大堆或者最小堆 最大堆即 堆顶元素为堆中最大的元素 最小堆即 堆顶元素为堆中最小堆元素 如下为一个最大堆 回到文章标题&#xff0c;获取一个数组中第K大的数&a…

HTML+CSS布局技巧及兼容问题【阅读季】

在IE6和IE7中&#xff0c;行高值必须大于字体的2px以上才能保证字体的完整显示或当作为链接时能显示下划线。 IE6 下去掉 input等元素 的边框 border: 0 none; 所有浏览器都可以了 边框1px {td不重叠状态}&#xff1a;border-collapse: collapse;&#xff08;table、td需同时…

php 去掉数组相同元素,php怎么去掉数组中重复的元素

php去掉数组中重复的元素的方法&#xff1a;可以通过内置函数array_unique()来实现。array_unique()函数可以移除数组中重复的值并返回过滤后的数组。如果数组中存在多个相同元素&#xff0c;则只保留第一个值。php为我们提供了专门的内置函数array_unique()来解决此问题。该函…

Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(完)...

原文 http://www.cnblogs.com/mayswind/archive/2013/04/01/2991271.html 【题外话】 这是这个系列的最后一篇文章了&#xff0c;为了不让自己觉得少点什么&#xff0c;顺便让自己感觉完美一些&#xff0c;就再把OOXML说一下吧。不过说实话&#xff0c;OOXML真的太容易 解析了&…

Makefile (2) gdb

gdb调试 1.用debug的方式编译 -g 2.打上断点 3.单步调试 step into 进入函数里面step over 运行整个函数step return 跳出当前函数 4.继续运行 5.打印和监控值 下面是栗子: 1 #include <stdlib.h>2 #include <stdio.h>3 ​4 static int add(int i) //创…

C++的 STL堆 实现获取中位数

前言 堆数据结构 使用的是优先级队列实现&#xff0c;创建堆的时候需要指定堆中元素的排列方式&#xff0c;即最大堆或者最小堆 最大堆即 堆顶元素为堆中最大的元素 最小堆即 堆顶元素为堆中最小堆元素 如下为一个最大堆 中位数&#xff1a; 一组数排序后&#xff0c;如果元…

php 变更 obj,PHP: 不向后兼容的变更 - Manual

不向后兼容的变更PHP 核心中不向后兼容的变更以数组形式访问非数组尝试以数组方式访问 null&#xff0c;bool&#xff0c;int&#xff0c;float 或 resource(例如 $null["key"])将会抛出 notice 通知。fn 关键词fn 成为了保留关键词。需要特别注意&#xff0c;它不能…

正由另一进程使用,因此该进程无法访问此文件。

相信很多人都遇到过这样的问题吧 最近我的电脑似乎有点抽风了,不知道为什么控制台程序,只要使用 开始执行(不调试) 必然就残留在进程中 而且进程管理器看不到~~ 最恶心的是,就算重启VS也还是不能生成 经过一些尝试后发现在cmd中tasklist可以看到这个进程 这就好办了 使用taskki…

mysql5.6下主主复制的配置实现

两台虚拟机192.168.183.131和192.168.183.132,装完系统之后直接把所有开发包都装上 下载软件包mysql-5.6.10.tar.gz&#xff0c;cmake-2.8.10.2.tar.gz&#xff08;从5.5开始mysql使用cmake来进行编译了而不是之前的configure&#xff09; mysql的编译安装 1.首先安装cmake [ro…

RSA加密传输代码示例

RSA加密传输代码示例 涉及敏感数据的传输&#xff0c;双方最好约定使用加密解密。那RSA非对称加密就大有作为了。服务端可以保留自己的私钥&#xff0c;发给客户端对应的公钥。这样就可以互相加解密了。php中rsa加解密实现&#xff1a; 首先要生成一对公钥私钥。前提是linux机器…