softlgl / Ocelot.Provider.Nacos

Repo for Nacos integration with Ocelot
72 stars 31 forks source link

关于动态路由问题 #1

Closed Nuan-Yang closed 4 years ago

Nuan-Yang commented 4 years ago

你好请问现在的nacos for ocelot 的路由配置只能通过 ocelot.json文件去配置吗? 据我所知consul是可以通过consul的服务自动路由过去的http:ip/serviceName/{其他url},通过用户输入的去查找这个服务是否存在,如果存在则自动路由过去。 如果我们这里有这个功能请您告知我应该如何配置,谢谢。

softlgl commented 4 years ago

@Nuan-Yang 不好意思,我近期没太在意GitHub上的信息,非常抱歉。据我了解您说的这种情况应该是属于ServiceName和UpstreamPathTemplate中的前缀一致的情况。这样的话可以根据UpstreamPathTemplate的前缀去统配到具体的Downstream服务,然后根据同名的ServiceName去发现服务具体的地址。这样的话您只需要将ServiceName(比如productapi)和UpstreamPathTemplate的前缀(比如/productapi/{everything})配置成一致即可,再次感谢支持。

yyang1207 commented 3 years ago

@Nuan-Yang 不好意思,我近期没太在意GitHub上的信息,非常抱歉。据我了解您说的这种情况应该是属于ServiceName和UpstreamPathTemplate中的前缀一致的情况。这样的话可以根据UpstreamPathTemplate的前缀去统配到具体的Downstream服务,然后根据同名的ServiceName去发现服务具体的地址。这样的话您只需要将ServiceName(比如productapi)和UpstreamPathTemplate的前缀(比如/productapi/{everything})配置成一致即可,再次感谢支持。

还是需要动态路由的吧,网关需要集群而且服务的数量太多配置起来很麻烦。

dcfeng commented 2 years ago

"Routes": [{ // 用于服务发现的名称,也就是注册到nacos上的名称 "ServiceName": "StockService", "DownstreamScheme": "http", //目标服务地址 "DownstreamPathTemplate": "/api/{route}", //网关地址 "UpstreamPathTemplate": "/gateway/{route}", "UpstreamHttpMethod": [ "Get", "Post" ], "LoadBalancerOptions": { "Type": "RoundRobin"
}, // 使用服务发现 "UseServiceDiscovery": true }] 启动网关通过 http://localhost:5203/gateway/stock/welcome 只有第一次访问成功,后续再也无法成功(500)提示信息: fail: Ocelot.Errors.Middleware.ExceptionHandlerMiddleware[0] requestId: 0HMGM9M5DRQFV:00000008, previousRequestId: no previous request id, message: Exception caught in global error handler, exception message: Object reference not set to an instance of an object.

不知道大佬们是否有遇到过?