1.環境への準備
「EurekaUseofSpringCloud」では引き続きEurekaクラスター環境を使用しています。
1.まず、ここに春の雲の親のpomプロジェクトがあります
2. spring-cloud-eureka-server Eureka Serverサブプロジェクトの場合、このポートの90から開始します
ここでのクラスターは、ポート9090とポート9091の2つのサービスインスタンスで構成されています。
3.spring-cloud-user-service-consumerユーザーサービス(つまり、サービスコンシューマー)。ここでは、最初にポート80を使用します。
4.spring-cloud-order-service-providerサービスを提供するための注文(サービスプロバイダー)ここでは、ポート番号70を使用します
注文サービスプロバイダーも、7070と7071の2つのインスタンスで構成されています
2.spring-cloud-eureka-server
spring-cloud-parent親プロジェクトとEurekaサーバーサービスspring-cloud-eureka-serverを移動する必要はありません。その後、それぞれポート9090とポート9091でEurekaサーバーを起動します。
3.注文サービス(サービスプロバイダー)
3.1 application.yml
ここでは、springbootプロファイルプロファイル機能を使用して、注文プロバイダーサービスspring-cloud-order-service-providerをさまざまなポートに分割します
spring:
application:
name: spring-cloud-order-service-provider
---
spring:
profiles: p1
eureka:
client:
service-url:
defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka
fetch-registry: true
register-with-eureka: true
instance:
prefer-ip-address: true # 使用ip注册
#自定义实例显示格式,添加版本号
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
server:
port: 7070
---
spring:
profiles: p2
eureka:
client:
service-url:
defaultZone: http://EurekaServerA:9090/eureka,http://EurekaServerB:9091/eureka
fetch-registry: true
register-with-eureka: true
instance:
prefer-ip-address: true # 使用ip注册
#自定义实例显示格式,添加版本号
instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@
server:
port: 7071
そして、開始するアイデアを構成します
3.2コントローラー
現在のサービスのポートを返すようにコントローラーを変更します。これにより、監視に役立ちます
@RestController
@RequestMapping("/order/data")
public class OrderStatisticServiceController {
@Value("${server.port}")
private Integer port;
/**
* 根据用户id获取今日完单数
* @param id 用户ID
* @return 完单数
*/
@GetMapping("/getTodayFinishOrderNum/{id}")
public Integer getTodayFinishOrderNum(@PathVariable("id") Integer id){
return port;
}
}
3.3開始
注文サービスプロバイダー7070および7071サービスをそれぞれ開始すると、2つのサービスプロバイダーがEurekaサーバーに登録されていることがわかります。
4.ユーザーサービス(サービス発信者)
発信者サービスの注文:spring-cloud-user-service-consumer:8080
4.1 RestTemplateConfiguration
RestTemplate構成クラスでRestTemplateを挿入するメソッドに注釈@LoadBalancedを追加する必要があります
@Configuration
public class RestTemplateConfiguration {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
Eurekaクライアントパッケージはリボン関連の依存関係を導入するのに役立つため、ここでリボンの依存関係を追加する必要はありません。
4.2コントローラー
ここでは、呼び出すサービスの名前を呼び出しURLに書き込むだけで、リボンがサービスリストから適切なサービス呼び出しを見つけるのに役立ちます。
@RestController
@RequestMapping("/user/data")
public class UserCenterController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getTodayStatistic/{id}")
public Integer getTodayStatistic(@PathVariable("id") Integer id){
String url ="http://spring-cloud-order-service-provider/order/data/getTodayFinishOrderNum/"+id;
return restTemplate.getForObject(url, Integer.class);
}
}
4.3テストを開始する
2回電話をかけ、それぞれ7071と7070を返しました。これは、リボンが機能していることを示しています。
4.4負荷分散戦略を調整する
デフォルトの負荷分散戦略は次のとおりです。ZoneAvoidanceRule:ゾーントレードオフ戦略。次に、構成を通じて他の負荷分散戦略を使用できます。たとえば、ランダム戦略を使用します。
application.yml中配置
これは、サービスspring-cloud-order-service-provider用です。
spring-cloud-order-service-provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
出典:CSDNブロガー「$ code out ofthefuture」
元のリンク:https://blog.csdn.net/yuanshangshenghuo/java/article/details/106975354