我是微服务和Spring Boot的新手 . 我有一些Spring Cloud 微服务,在端口8080上运行Zuul网关 .
browser
|
|
gateway (:8080)
/ \
/ \
/ \
resource UI (:8090)
端口8090上有一个UI微服务,它有一个带有方法的控制器,返回index.html .
我为这个UI配置了Zuul路由(我也使用了Eureka):
zuul:
routes:
ui:
path: /ui/**
serviceId: myproject.service.ui
stripPrefix: false
sensitiveHeaders:
如果我调用 http://localhost:8080/ui/
一切正常,我看到我的index.html的渲染 .
是否有可能以某种方式配置Spring Cloud以使以下流程工作:调用 http://localhost:8080/
将我们重定向到UI微服务的控制器,它返回index.html?
所以我的想法是从我的网站的根目录打开UI .
提前致谢!
2 回答
最后,我让我的代码工作了!感谢@pan提及Zuul Routing on Root Path问题和@RzvRazvan揭示Zuul路由如何工作 .
我刚刚将 controller 添加到Zuul路由的网关微服务中,其中一个 endpoints 从根
http://localhost:8080/
重定向到http://localhost:8080/ui/
:Zuul 属性,用于从端口 8080 上的 Gateway microservice 重定向为
http://localhost:8080/ui/
到 UI microservice ,在端口 8090 上实现为单独的Spring Boot应用程序http://localhost:8090/ui/
:UI微服务的属性:
最后,这个调用
http://localhost:8080/
将我们重定向到UI微服务的控制器,它返回视图index.html
:实际上,我在这种架构中渲染静态内容时遇到了另一个问题,但它与我的前端配置有关,我使用Vue.js框架开发 . 我将用几句话来描述它,以防它可能对某人有帮助 .
我有以下UI微服务的文件夹结构:
public
文件夹的所有内容均由 webpack 任务 webpack 和 vue.js 生成 . 第一次,我打电话给我http://localhost:8080/
我为所有其他静态资源获得index.html
和 404 ,因为它们被调用如下:因此,为webpack中的静态资产配置了错误的公共路径 . 我在
config\index.js
更改了它:静态资产变得恰到好处 . 例如 . :
如果你想在Zuul上使用UI(前端),你可以在resources / static文件夹(html,css和js文件)中添加静态内容 . 通过这种方式,您的代理可以呈现index.html(当然,您必须在静态文件夹中拥有index.html) . 这样在
http://localhost:8080
上代理将呈现index.html;您也可以有其他路径,但所有这些路径都由index.html管理)关于路由,Zuul只重定向http请求 . http://localhost:8080/ui/ . 在
8080
上运行代理(Zuul)但是/ui
是资源服务器的上下文路径 . 当您在此路径上进行呼叫时,代理将重定向到资源服务器并实际发出请求http://localhost:8090/ui/它是浏览器路径和http请求路径之间的区别 . 浏览器路径由index.html管理,http请求由Zuul管理 . 我不知道我是否足够明确 .
还有一件事......您可以在http请求和index.html上使用相同的路径(
/ui
),当您的浏览器使用http请求方法访问http://localhost:8080/ui/ a .js文件时,将向http://localhost:8080/ui/发出http请求,然后将重定向到http://localhost:8090/ui/,资源服务器的响应将在http://localhost:8080/ui/的页面上呈现 .