如何使用spring eureka连接弹簧?

时间:2016-01-26 09:55:25

标签: spring-boot spring-cloud netflix-eureka spring-oauth2

我使用Spring Tutorial创建了一个单页面应用程序,用于制作一个AngularJS和OAuth,如下所示: https://spring.io/guides/tutorials/spring-security-and-angular-js/#_multiple_ui_applications_and_a_gateway_single_page_application_with_spring_and_angular_js_part_vi

这是SPA应用程序的application.yml文件:

security:
  user:
    password: none
  oauth2:
    client:
      accessTokenUri: localhost:7777/uaa/oauth/token
      userAuthorizationUri: localhost:7777/uaa/oauth/authorize
      clientId: acme
      clientSecret: acmesecret
    resource:
      user-info-uri: localhost:7777/uaa/user


zuul:
  routes:
    resource:
      path: /resource/**
      url: localhost:9000/resource
    user:
      path: /user/**
      url: localhost:7777/uaa/user

eureka:
  client:
    serviceUrl:
      defaultZone: ${vcap.services.eureka-service.credentials.uri:127.0.0.1:8761}/eureka/

---
spring:
  profiles: cloud
eureka:
  instance:
    hostname: ${APPLICATION_DOMAIN}
    nonSecurePort: 80

我想知道如何更改zuul路由和user-info-uri,以便我不必指定网址,所有这些都可以通过使用service-id来完成。我在这里查看了使用eureka的教程:

https://spring.io/blog/2015/01/20/microservice-registration-and-discovery-with-spring-cloud-and-netflix-s-eureka

但我不太明白如何在不将所有java添加到我的代码中的情况下实现我的目标,因为基本的eureka服务器似乎已经注册了我的所有服务。

2 个答案:

答案 0 :(得分:2)

使用eureka服务id的问题,userInfoUri曾经一直抛出UnknownHost异常,@ LoadBallanced restTemplate没有解决我的问题,解决方案是将prefer-token-info设置为false(如果为true - 没有负载ballancing为oauth )

security.oauth2.resource.service-id={Service ID as at eureka server registered}
security.oauth2.resource.userInfoUri= http://${security.oauth2.resource.service-id}/user/me
security.oauth2.resource.loadBalanced=true
security.oauth2.resource.prefer-token-info=false

如果使用服务ID,则不需要端口号,但如果使用了ip或主机

,则需要端口号

答案 1 :(得分:1)

如果我理解你的问题是正确的,你可以使用这种模式中的配置文件:

zuul:
  routes:
    <service_id>:
      path: /path/**

例如(如果您的oauth-service注册为auth):

zuul:
  routes:
    auth:
      path: /user/**

Zuul将利用Eureka并找到服务的端点。除此之外,它还将提供客户端负载平衡。