我正在使用作为zuul代理(@EnableZuulProxy)的前端spring spring应用程序(微服务)将来自外部源的请求路由到使用spring cloud(spring boot)编写的其他内部微服务.
zuul服务器直接位于samples部分的应用程序中
@SpringBootApplication
@Controller
@EnableZuulProxy
@EnableDiscoveryClient
public class ZuulServerApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulServerApplication.class).web(true).run(args);
}
}
Run Code Online (Sandbox Code Playgroud)
我在本地运行这组服务,它似乎工作正常但如果我在网络上运行它有一些负载或通过VPN然后我开始看到zuul转发错误,我在日志中看到客户端超时
有没有办法改变zuul前锋的超时,所以我可以从我的直接关注中消除这个问题.有什么可访问的参数设置.
我正处于发布阶段,这只是出现了:)
我无法弄清楚为什么会出现这个错误.我尝试清理冗余的库等等.
我尝试这样做时收到错误:
mongo = new Mongo(host, port);
Run Code Online (Sandbox Code Playgroud)
有趣的是,我可以运行我从IDE(IntelliJ)制作的任何单元测试,但是当我尝试通过Tomcat运行它时,我得到了这个:
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.
sfatandrei.db.MongoManager]: Constructor threw exception; nested exception is java.lang.IncompatibleCla
ssChangeError: Implementing class
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInst
antiationStrategy.java:110)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(Constructo
rResolver.java:280)
... 82 more
Caused by: java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2889)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2889)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
at com.mongodb.MongoOptions.reset(MongoOptions.java:47)
at com.mongodb.MongoOptions.<init>(MongoOptions.java:29)
at com.mongodb.Mongo.<init>(Mongo.java:148) …Run Code Online (Sandbox Code Playgroud) 是否有可用于MySQL JDBC连接器的javadoc?如果是这样,我在哪里可以找到它们?
谷歌搜索,我遇到了类MysqlDataSource等链接.但这是官方的吗?我想我正在寻找来自mysql.com或附属公司的东西.有这样的事吗?
启动应用程序:
@SpringBootApplication
@EnableZuulProxy
public class ZuulServer {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulServer.class).web(true).run(args);
}
}
Run Code Online (Sandbox Code Playgroud)
我的YAML文件是这样的:
server:
port:8080
spring:
application:
name: zuul
eureka:
client:
enabled: true
serviceUrl:
defaultZone: http://localhost:8761/eureka/
zuul:
proxy:
route:
springapp: /springapp
Run Code Online (Sandbox Code Playgroud)
我有一个名为springapp的微服务应用程序(在端口8081上),并有一些休息服务.以下是我的客户端UI应用:
<html>
<head>
<title>TODO supply a title</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="text/javascript" src="js/libs/jquery/jquery.min.js" ></script>
</head>
<body>
<script type="text/javascript">
$.ajax({
url: 'http://localhost:8080/zuul/springapp/departments',
type: 'GET'
}).done(function (data) {
consoe.log(data);
document.write(data);
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但我得到了一个
XMLHttpRequest cannot load http://localhost:8080/zuul/springapp/departments. No
'Access-Control-Allow-Origin' header is …Run Code Online (Sandbox Code Playgroud) 我看到的大多数示例都是一个服务的路由定义.
所以这样的事情:
zuul:
routes:
myserver:
path: /mypath/**
Run Code Online (Sandbox Code Playgroud)
让我们说我想将几条路由路由到一个服务,所以实际上它会是这样的:
zuul:
routes:
myserver:
path: /mypath/**, /anotherpath/**
Run Code Online (Sandbox Code Playgroud)
配置文件中不允许这样做,也不允许两次使用相同的路由名称.有没有真正的方法来做到这一点?
我注意到Spring-Cloud ZUUL强制执行隔离到SEMAPHORE而不是THREAD默认值(根据Netflix的推荐).
评论org.springframework.cloud.netflix.zuul.filters.route.RibbonCommand说:
我们希望默认为信号量隔离,因为这包含了另外两个已经线程隔离的命令
但我仍然没有得到它:-(那两个其他命令是什么?
以这种方式配置,Zuul只能调整加载但不允许超时并让客户端离开.简而言之,即使Hystrix超时设置为1000毫秒,只有在转发到链中的服务的调用返回时(或者由于例如ReadTimeout而超时),才会释放客户端.
我试图通过覆盖配置强制THREAD隔离(不幸的是,每个服务,因为在代码中强制默认),一切似乎按预期工作.但是,如果没有正确理解其含义,我并不热衷于这样做 - 当然关于代码中的注释以及Spring的Zuul版本采用的默认值.
有人可以提供更多信息吗?谢谢
我正在尝试使用spring-cloud-starter-zuul.我已经设置了Eureka并注册了一个我作为Eureka客户端编写的简单服务.我在具有两个不同应用程序名称的两个不同主机上注册了两个实例,因此它们是Eureka中的两个不同服务.我的目标是确保如果serviceA运行良好且serviceB执行效果不佳,则代理serviceA的代理不会因代理到serviceB而失败.
如果我通过zuul单独运行负载测试serviceA,我能够毫无问题地保持400 TPS吞吐量.如果我然后投入serviceB并完全超载它并让它在所有地方超时,我希望serviceA在serviceB flounders时继续400,但是serviceA降低到低于50 TPS成功率并且有一堆错误好.
似乎RibbonRoutingFilter产生的所有RibbonCommands在hystrix中共享相同的电路,这对我来说毫无意义.查看RibbonRoutingFilter创建RibbonCommand的地方,我没有看到任何方法将其配置为使用另一个.
在RibbonRoutingFilter中:
RibbonCommand command = new RibbonCommand(restClient, verb, uri,
convertHeaders(headers), convertHeaders(params), requestEntity);
Run Code Online (Sandbox Code Playgroud)
我已经验证了restAient对于serviceA和serviceB是不同的,所以他们正在使用他们自己的连接池配置,就像我在application.yml文件中指定的那样,但是serviceA和serviceA之间的服务质量仍然存在大量的交叉污染. serviceB.
似乎有另一个RibbonCommand的构造函数,它将"commandKey"作为第一个参数,我引用的那个只是委托给那个commandKey值为"default"的构造函数.我看不到在RibbonRoutingFilter中覆盖它的开关或选项.对我来说,这严重损害了Zuul在弹簧云项目中使用时的可行性.
有没有办法让我开箱即用,以便每个服务都有自己的电路?
我的pom的适用部分:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>1.0.0.RC1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
application.yml:
ribbon:
ConnectTimeout: 5000
ReadTimeout: 5000
MaxAutoRetries: 0
MaxAutoRetriesNextServer: 0
OkToRetryOnAllOperations: false
MaxHttpConnectionsPerHost: 200
MaxTotalHttpConnections: 1000
echo1:
ribbon:
ActiveConnectionsLimit: 200
echo2:
ribbon:
ActiveConnectionsLimit: 400
spring:
application:
name: SpringCloudProxywall
server:
port: 8080
zuul:
routes:
echo1:
path: /echo1/**
serviceId: echo1 …Run Code Online (Sandbox Code Playgroud) 我使用Spring Cloud和Zuul代理作为我的RESTful服务的网关.
网关应用程序(在端口8080上运行的Spring Boot Web应用程序)相关代码: -
主要课程: -
@SpringBootApplication
@EnableZuulProxy
public class WebfrontApplication extends WebMvcConfigurerAdapter {
/**
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(WebfrontApplication.class, args);
}
Run Code Online (Sandbox Code Playgroud)
}
Zuul Mappings: -
zuul:
routes:
customer:
path: /customer/**
url: http://localhost:9000/
Run Code Online (Sandbox Code Playgroud)
在启动上述UI网关应用程序期间,我可以在我的日志中看到代理的映射已注册: -
o.s.c.n.zuul.web.ZuulHandlerMapping : Mapped URL path [/customer/**] onto handler of type [class org.springframework.cloud.netflix.zuul.web.ZuulController]
Run Code Online (Sandbox Code Playgroud)
REST服务(在端口9000上运行的Spring Boot Web应用程序)相关代码: -
@RestController
@RequestMapping(value = "/customer")
public class CustomerController {
@Autowired
private CustomerService customerService;
/**
* Get List of All customers.
*
* …Run Code Online (Sandbox Code Playgroud) spring-mvc spring-security spring-boot spring-cloud netflix-zuul
我想为我正在编写的spring cloud微服务编写一些自己的自定义zuul过滤器.一旦我编写了过滤器,我该如何集成它,以便底层的netflix zuul框架可以利用它.
在Eclipse中使用搜索功能时,尤其是Java方法或字段,即"工作区中的引用".(控制+ Shift + G)当光标在某个方法上时,比方说.
如何让搜索结果显示单行预览.(想想 - 就像我用过的所有其他搜索工具一样,从grep到Visual Studio?)
如果我搜索"文本位"(没有'参考'搜索提供的范围解析的好处,它提供它),但似乎无法弄清楚在搜索引用时如何.
(对于一些类变量来说public double x,这对于像'x'这样的错误列表的海洋来说,绝对是非常有用的)
通过例子澄清我的问题:
在附加的屏幕shot1中,有111个方法的引用getHeight().但是,如果没有pop-pop-pop,从入门到入口跳跃,就没有办法看到它们?
截图A: 
(不要让我直接包括由于一些奇怪的,有点愚蠢的烦人,帐户限制的事情...)
然而,如果我搜索(在工作区中)getHeight()使用"文件搜索"作为"原始文本"(案例过滤和过滤*.java),请注意现在看到560个匹配,或449个"误报"相对于我真正感兴趣的范围然而,至少看看"搜索"对话框如何查看!(耶).为我提供每个条目的快速"线预览".
.屏幕截图B在这里:
.
如何获得屏幕截图B中提供的线预览,但是对于"搜索"对话框中"范围过滤"搜索"Java搜索"选项卡中的111个匹配项(我在此示例中关注的那些)?
/////////////////////////////////////////////
我看了看,尝试了扩展,挖掘了偏好设置,似乎无法弄清楚如何"启用"该行预览搜索"限制为"参考'
netflix-zuul ×7
spring-cloud ×7
java ×4
spring ×3
spring-boot ×2
eclipse ×1
hystrix ×1
javadoc ×1
maven ×1
mongodb ×1
search ×1
spring-mvc ×1
tomcat ×1