SpringBoot のサービス間の呼び出し方法

Spring Bootでは、サービス間の呼び出しを実装する方法は、以下の通りです。

  1. RestTemplateを使用したHTTP通信:RestTemplateオブジェクトを作成することで、HTTPリクエストを送信してレスポンスを取得可能。RestTemplateは、他のサービスのAPIインターフェースを呼び出すことができる。
RestTemplate restTemplate = new RestTemplate();
String response = restTemplate.getForObject("http://other-service/api/endpoint", String.class);
  1. Feignクライアントの使用:Feignは、宣言的なWebサービスクライアントです。インターフェースを定義することで他のサービスのAPIを記述し、このインターフェースをFeignクライアントで呼び出すことができます。

はじめに、pom.xmlファイルにFeignの依存関係を追加します。

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

次に、起動クラスに@EnableFeignClientsアノテーションを追加して、Feignクライアントを有効にします。

@EnableFeignClients
@SpringBootApplication
public class Application {
  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

最後に、Feign クライアントインタフェースを定義し、それを使用して別のサービスの API を呼び出します。

@FeignClient(name = "other-service")
public interface OtherServiceClient {
  @GetMapping("/api/endpoint")
  String getEndpoint();
}

@RestController
public class MyController {
  @Autowired
  private OtherServiceClient otherServiceClient;
  
  @GetMapping("/my-endpoint")
  public String myEndpoint() {
    return otherServiceClient.getEndpoint();
  }
}
  1. メッセージキューを用いることで、リクエストをメッセージキューに送信しておくと、他のサービスは メッセージを購読してリクエストを処理できる。これにより、非同期呼び出しが可能になり、サービス間の依存関係を緩和できる。

最初に、RabbitMQやActiveMQなどのメッセージキューを構築し、アプリケーションでそのクライアントを使用する必要があります。

リクエストを送信するサービス側では、リクエストをメッセージキューに送信する

@Autowired
private RabbitTemplate rabbitTemplate;

public void sendRequest() {
  rabbitTemplate.convertAndSend("request-queue", "request-message");
}

リクエストを処理するサービスでメッセージキューをリッスンしてリクエストを処理する。

@RabbitListener(queues = "request-queue")
public void handleRequest(String message) {
  // 处理请求逻辑
}

これらの手法はサービス間呼び出しを実現するための手段の違いを提供しており、状況に応じて適切な手法を選択する必要がある。

bannerAds