负载均衡器不包含服务 API-GATEWAY 的实例

发布于 2025-01-14 11:20:46 字数 2632 浏览 3 评论 0原文

我正在开发 3 个 spring boot 应用程序,其中有 2 个应用程序用于在两个应用程序之间进行通信,我正在使用 feign 客户端,我也是 1 个 api-gateway 应用程序,其中包含不同应用程序的所有条目 feign 客户端控制器在

@Autowired
    PaymentService paymentService;
    @PostMapping(value = "/payments/{appointmentId}")
    public String changePaymentStatus(@PathVariable(name = "appointmentId")String appointmentId){
        paymentService.changePaymentStatus(appointmentId);
        return "Done";
    }

这里是 feign 客户端代码

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(name = "API-GATEWAY")
public interface AppointmentServiceClient {
    @RequestMapping(value = "${appointmentApp.changePaymentStatus}",method = RequestMethod.POST)
    public String changePaymentStatus(@PathVariable(name = "appointmentId")String appointmentId);
}

这里我使用了“API-GATEWAY”,因为有一个应用程序以这个名称运行,它的 application.yml 文件在这里

  port: 9191

spring:
  application:
    name: API-GATEWAY
  cloud:
    gateway:
      routes:
        - id: DOCTOR-SERVICE
          uri: lb://DOCTOR-SERVICE
          predicates:
            - Path=/doctor_app/**

        - id: APPOINTMENT-SERVICE
          uri: lb://APPOINTMENT-SERVICE
          predicates:
            - Path=/appointment_app/**

        - id: USER-ON-BOARDING-SERVICE
          uri: lb://USER-ON-BOARDING-SERVICE
          predicates:
            - Path=/user_app/**

        - id: RATING-SERVICE
          uri: lb://RATING-SERVICE
          predicates:
            - Path=/rating_app/**

        - id: PAYMENT-SERVICE
          uri: lb://PAYMENT-SERVICE
          predicates:
            - Path=/payment_app/**
    discovery:
      enabled: true

此外 AppointmentServiceClient 的 @RequestMapping 中的值具有 application.properties 作为这里显示

appointmentApp.address = http://APPOINTMENT-SERVICE 
appointmentApp.changePaymentStatus = /appointment_app/v1/payments/{appointmentId}

这里我想使用 feign 客户端通过 api-gateway 调用约会服务

另外 feign 客户端尝试调用的控制器方法是

@PostMapping(value = "/v1/payments/{appointmentId}")
    public String changePaymentStatus(@PathVariable(name = "appointmentId")String appointmentId){
        appointmentService.changePaymentStatus(appointmentId);
        return "done";
    }

通过从邮递员做一个 POST 我得到feign.FeignException$ServiceUnavailable: [503] 在 [POST] 期间 [http://API-GATEWAY/appointment_app/v1/ payments/ndjkccbc7868] [AppointmentServiceClient#changePaymentStatus(String)]: [负载均衡器不包含服务API-网关]

I am working on 3 spring boot application from which 2 applications i am using for communication between the two i am using feign client also i am 1 application for api-gateway which has all the entries for diffrent application
feign client controller is

@Autowired
    PaymentService paymentService;
    @PostMapping(value = "/payments/{appointmentId}")
    public String changePaymentStatus(@PathVariable(name = "appointmentId")String appointmentId){
        paymentService.changePaymentStatus(appointmentId);
        return "Done";
    }

here is the feign client code

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(name = "API-GATEWAY")
public interface AppointmentServiceClient {
    @RequestMapping(value = "${appointmentApp.changePaymentStatus}",method = RequestMethod.POST)
    public String changePaymentStatus(@PathVariable(name = "appointmentId")String appointmentId);
}

Here i have used "API-GATEWAY" because the there is one application running with this name and its application.yml file is here

  port: 9191

spring:
  application:
    name: API-GATEWAY
  cloud:
    gateway:
      routes:
        - id: DOCTOR-SERVICE
          uri: lb://DOCTOR-SERVICE
          predicates:
            - Path=/doctor_app/**

        - id: APPOINTMENT-SERVICE
          uri: lb://APPOINTMENT-SERVICE
          predicates:
            - Path=/appointment_app/**

        - id: USER-ON-BOARDING-SERVICE
          uri: lb://USER-ON-BOARDING-SERVICE
          predicates:
            - Path=/user_app/**

        - id: RATING-SERVICE
          uri: lb://RATING-SERVICE
          predicates:
            - Path=/rating_app/**

        - id: PAYMENT-SERVICE
          uri: lb://PAYMENT-SERVICE
          predicates:
            - Path=/payment_app/**
    discovery:
      enabled: true

Also the value in @RequestMapping of AppointmentServiceClient has application.properties as shown here

appointmentApp.address = http://APPOINTMENT-SERVICE 
appointmentApp.changePaymentStatus = /appointment_app/v1/payments/{appointmentId}

Here i am want to call APPOINTMENT-SERVICE through api-gateway using feign client

Also the controller method which the feign client is trying to call is

@PostMapping(value = "/v1/payments/{appointmentId}")
    public String changePaymentStatus(@PathVariable(name = "appointmentId")String appointmentId){
        appointmentService.changePaymentStatus(appointmentId);
        return "done";
    }

By doing a POST from postman i am getting feign.FeignException$ServiceUnavailable: [503] during [POST] to [http://API-GATEWAY/appointment_app/v1/payments/ndjkccbc7868] [AppointmentServiceClient#changePaymentStatus(String)]: [Load balancer does not contain an instance for the service API-GATEWAY]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文