登録センター - Eureka

レジストリを導入する前に、プロバイダーとコンシューマーの概念を紹介します。

プロバイダーとコンシューマー

サービス プロバイダー: ビジネス内の他のマイクロサービスによって呼び出されるサービス。 (他のマイクロサービスへのインターフェースを提供する)

サービス コンシューマー: 1 つのビジネス内の他のマイクロサービスを呼び出すサービス。 (他のマイクロサービスによって提供されるインターフェースの呼び出し)

プロバイダーとコンシューマーは相対的です。サービスはプロバイダーとコンシューマーの両方になることができます。

Eureka

プロバイダーが複数ある場合、消費者はどのようにしてプロバイダー情報を入手し、プロバイダーの健全性状態を知ることができるのでしょうか?

起動時に、マイクロサービスは Eureka にサービス情報を登録します。コンシューマーは Eureka を通じてプロバイダー情報を取得し、それをリモートで呼び出すことができます。マイクロサービスは 30 秒ごとに Eureka にまだ稼働中であることを通知し、Eureka はサービス リスト情報を更新して、正常でないサーバーを削除します。

複数のサービス プロバイダーがある場合、コンシューマーは負荷分散アルゴリズムを使用してサービス リストから 1 つを選択します。

建てる

新しい Maven モジュールを作成し、依存関係を導入する

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

スタートアップクラスの作成

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

設定ファイル

server:
  port: 7995
spring:
  application:
    name: eureka-server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:7995/eureka

サービスに登録する

依存関係の導入

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

構成の記述

spring:
  application:
    name: userService
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:7995/eureka

サービスの利用

上記の登録例

@Bean
@LoadBalanced
public RestTemplate restTemplate(){
    return new RestTemplate();
}

ドメイン名をサービス名に変更する

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.注文をクエリ
        Order order = orderMapper.findById(orderId);
        // 2.ユーザーをクエリ
        // String url = "http://localhost:8081/user/" + order.getUserId();
        String url = "http://userService/user/" + order.getUserId();
        User user = restTemplate.getForObject(url, User.class);
        // 3.ユーザー情報をカプセル化する
        order.setUser(user);
        // 4.戻る
        return order;
    }
}
This post is licensed under CC BY-NC-SA 4.0 by the author.
最終更新 2025-02-05 17:15 +0900

Hugo で構築されています。 | テーマ StackJimmy によって設計されています。