記事ディレクトリ
初めてナコスを知る
サービスの登録と発見
サービスプロバイダーとサービスコンシューマーに依存関係を追加する
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
application.yml構成ファイルにnacosサーバーアドレスを追加します
spring:
cloud:
nacos:
#nacos服务端地址
server-addr: localhost:8848
Nacosを起動します
最初にnacosを開始し、次にspringbootプロジェクト
を開始してから、サービスプロバイダーとサービスコンシューマープロジェクトを開始する必要があることに注意してください。
テスト
ナコスクラスター
クラスターを構成する
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
#配置集群名称(自定义)
cluster-name: HZ
私は8083がBJクラスターに設定され、残りの3つがHZクラスターである4つのプロジェクトを開始しました
NacosRuleロードバランサー
負荷分散をNacosRuleに設定すると、それ自体と同じクラスター内でサービスを見つけることが優先されます。
userservice:
ribbon:
#负载均衡规则
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
ウェイト負荷分散(ウェイトが低いほど、割り当てられるリクエストは少なくなり、ウェイトが0の場合はリクエストは割り当てられません)
ナコス環境隔離
Nacosのサービスストレージとデータストレージの最外層は名前空間と呼ばれるもので、最外の分離に使用されます
名前空間を変更する
8080サービスの名前空間を変更します
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
#填命名空间ID
namespace: 15a1ca9f-6f14-4da8-a1c5-7c2fdcf268f9
サービス
を再起動し、クエリの注文情報に再度アクセスします
エラーの理由:名前空間が異なると、orderserviceはuserserviceインスタンスを見つけられません
04-02 21:40:30:229 ERROR 30908 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] :
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed;
nested exception is java.lang.IllegalStateException: No instances available for userservice] with root cause
ナコスとユーレカの比較
- 類似点:
1。両方がサービス登録とプルを
サポートします2.両方がヘルス検出のためのサービスプロバイダーハートビートをサポートします - 違い:
1。Nacosは、プロバイダーのステータスをアクティブに検出するサーバーをサポートします。一時インスタンスはハートビートモードを使用し、非一時インスタンスはアクティブ検出モードを使用します
。2。ハートビートが異常な場合、一時インスタンスは拒否され、非一時インスタンスは拒否されません。
3. Nacos 4. Nacos
クラスターはデフォルトでAPモードを採用します。クラスター内に非一時インスタンスがある場合、PCモードが採用され、EurekaはAPモードを採用します。
spring:
cloud:
nacos:
server-addr: localhost:8848,localhost:8847
discovery:
#设置是否为临时实例
ephemeral: false
Nacos構成管理
1.新しい構成情報の名前
データIDは[サービス名]-[実行環境].yamlを使用することをお勧めします。サフィックスはyamlを使用することをお勧めします(ymlは推奨されません)
2。構成管理クライアントの依存関係ナコスの紹介
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
3.リソースディレクトリに新しいbootstrap.ymlファイルを作成します。このファイルはブートストラップファイルであり、application.ymlよりも優先されます。プログラムが起動すると、nacosの構成ファイルは、この構成ファイルのnacosアドレス、サービス名、現在の環境、およびファイル拡張子に従って読み取られます。
spring:
application:
#服务名称
name: userservice
profiles:
#开发环境
active: dev
cloud:
nacos:
#Nacos地址
server-addr: localhost:8848
config:
#文件后缀名
file-extension: yaml
Nacos構成のホットアップデート
Nacosの構成ファイルが変更された後、マイクロサービスは再起動せずにそれを認識できます
最初の方法:@RefreshScopeアノテーションを追加します
@Controller
@RequestMapping("/user")
@RefreshScope
public class UserController {
//...
}
2番目の方法:構成クラスを使用する
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}
構成クラスを注入する
@Autowired
private PatternProperties properties;
マルチ環境構成の共有
マイクロサービスが開始すると、nacosから複数の構成ファイルを読み取ります。
- [spring.application.name]-[spring.profiles.active] .yaml、例如:userservice-dev.yaml
- [spring.application.name] .yaml、例如:userservice.yaml
プロファイルがどのように変更されても、ファイル[spring.application.name] .yamlが読み込まれるため、複数の環境の共有構成をこのファイルに書き込むことができます
。複数の構成の優先度:[サービス名]-[環境] .yaml>[サービス名].yaml>ローカル構成
構成ファイルを異なるマイクロサービス間で共有できますか?
はい、構成ファイルは異なるマイクロサービス間で共有できます
- 方法1:
spring:
cloud:
nacos:
config:
file-extension: yaml #文件后缀名
shared-configs: #多微服务间共享的配置列表
- dataId: common.yaml #要共享的配置文件
- 方法2
spring:
cloud:
nacos:
config:
file-extension: yaml #文件后缀名
extends-configs: #多微服务间共享的配置列表
- dataId: common.yaml #要共享的配置文件