在 Heroku 上部署 JHipster 7.9.3 生成的微服务应用程序后收到以下消息。我的应用程序有 2 个微服务(tajvoteservice 和 siennaservice),这两个微服务都是我们的微前端。当我在我的笔记本电脑上本地部署我的应用程序时,它工作正常;然而,在 Heroku 上,我在网关上收到以下错误消息:
2023-03-25T16:35:53.163730+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/services/siennaservice/remoteEntry.js" host=www.saathratri.com request_id=7e56ca8a-620e-45b9-bb9d-a2241aa2143c fwd="50.172.26.133" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0 protocol=https
2023-03-25T16:35:53.095621+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/services/tajvoteservice/remoteEntry.js" host=www.saathratri.com request_id=d4f9e086-fe6e-465a-9855-7bb8f9c78d2d fwd="50.172.26.133" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0 protocol=https
2023-03-25T16:36:23.127957+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/services/tajvoteservice/remoteEntry.js" host=www.saathratri.com request_id=0d5053bf-4cf9-412b-b59b-e67ff17e3bf5 fwd="50.172.26.133" dyno=web.1 connect=0ms service=30001ms status=503 bytes=0 protocol=https
我尝试检查网关的 webpack.microfrontend.js 中的 remotes 参数:
...
module.exports = (config, options, targetOptions) => {
return {
plugins: [
new ModuleFederationPlugin({
remotes: {
tajvoteservice: 'tajvoteservice@/services/tajvoteservice/remoteEntry.js',
siennaservice: 'siennaservice@/services/siennaservice/remoteEntry.js',
},
...
我改成如下:
...
module.exports = (config, options, targetOptions) => {
return {
plugins: [
new ModuleFederationPlugin({
remotes: {
tajvoteservice: 'tajvoteservice@https://www.saathratri.com/services/tajvoteservice/remoteEntry.js',
siennaservice: 'siennaservice@https://www.saathratri.com/services/siennaservice/remoteEntry.js',
},
...
但是出现同样的错误。
我在浏览器控制台中收到以下错误:
main.1cba1d1f42986c71.js:1 Initialization of sharing external failed: ScriptExternalLoadError: Loading script failed.
(error: https://www.saathratri.com/services/siennaservice/remoteEntry.js)
我认为这与 Webpack 和 Module Federation(也不是微前端)无关。我已将部署(在 JDL 中)更改为常规微服务,但仍然收到 503(服务不可用)错误。在我看来,这与 Auth0 有关。但不确定出了什么问题。我按照 https://www.jhipster.tech/security/#oauth2 中的说明进行操作,但没有运气。
问题是我的微服务中的 Eureka 服务配置(网关没问题)。我的微服务中的 Eureka 的 application-prod.yml 中必须包含以下内容:
...
eureka:
instance:
hostname: tajvote-service.herokuapp.com
non-secure-port: 80
prefer-ip-address: false
client:
service-url:
defaultZone: ${JHIPSTER_REGISTRY_URL}/eureka/
...
主机名条目很重要。
微服务没有被调用,网关一直返回Service Unavailable(503),因为Eureka配置错误; sienna-service 和 tajvote-service 微服务没有正确地向服务发现 Eureka 注册自己,因此 Eureka 不知道如何将请求转发到各自的微服务。一旦添加了 Eureka 配置中的主机名条目,事情就开始工作了,503 服务不可用错误消失了。
最终这个问题与Auth0和微前端无关。此外,是的,使用部署在 Heroku 上的微前端的 JHipster 7.9.3 应用程序确实有效(只要您对拼图的服务发现部分进行了排序)!