'Deployment issue on Heroku : zuul + eureka + microservices

Thanks for taking the time to read my post.

My issue is as such. I have 2 microservices (auth-service and image-service) deployed on Heroku, as well as a server Eureka and a gateway Zuul.

In local, all of this works.

However, when deployed, the same calls give me 404 errors : for example : zuul is deployed on port 8762 in local, so http://localhost:8762/images/user/create works, it points to http://localhost:8200/user/create of the image-service. Deployed, https://croquis-time-image.herokuapp.com/user/create works, but https://croquis-time-zuul.herokuapp.com/images/user/create throws a 404 error. On eureka however, all my services are registered, so the trouble doesn't come from there. I thought perhaps zuul didn't manage to get all the services from Eureka, but I'm not sure how to check.

More information : application.yml of zuul deployed :

server:
  port: 8762

eureka:
  client:
    serviceUrl:
      defaultZone: https://croquis-time-eureka.herokuapp.com/eureka/
  instance:
    hostName: croquis-time-eureka.herokuapp.com

zuul:
  #Service will be mapped under the /api URI
  prefix: /api
#  Uncomment to disable auto-registering all services read from Eureka
 # ignoredServices: '*'
  routes:
    image-service:
      path: /images/**
      serviceId: image-service
    auth-service:
      path: /auth/**
      serviceId: auth-service
      stripPrefix: false
      sensitiveHeaders: Cookie,Set-Cookie

spring:
  application:
    name: zuul-server

security:
  jwt:
    uri: /auth/**
    prefix: Bearer
    expiration: 86400
    header: Authorization
    secret: *****************

The application.yml of eureka deployed

server:
  port: 8761

eureka:
  instance:
    hostname: croquis-time-eureka.herokuapp.com
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: https://croquis-time-eureka.herokuapp.com/eureka/
spring:
   application:
       name: eureka-server

The image service I'm trying to call :

server:
  port: 8200

eureka:
  client:
    serviceUrl:
      defaultZone: https://croquis-time-eureka.herokuapp.com/eureka/
  instance:
    hostName: croquis-time-eureka.herokuapp.com
spring:
  application:
    name: image-service
  jpa:
    showSql: true
    hibernate:
      ddlAuto: update
  datasource:
    url: jdbc:mysql://***********:3306/croquis-time
    username: ******************
    password: ****************

I have tried removing and adding the "ignored-services" from zuul to see if that was the problem, but it didn't change anything. I'm very willing to edit my question with more information if you require more, I'm not sure where is the origin of the problem, so I'm a bit at a loss as to what to add.

Thanks !



Solution 1:[1]

you have an issue with the configuration of .yml in zuul server Your .yml of zuul server must be:

instance:
    hostName: croquis-time-zuul.herokuapp.com

And your .yml of image must be:

instance:
    hostName: croquis-time-image.herokuapp.com

because instance.hostname is the host of your application acting as the eureka client. if you need more information please visit: https://blog.heroku.com/managing_your_microservices_on_heroku_with_netflix_s_eureka

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Johan David Munoz Olarte