最終更新日:
最後のブログは、我々は主要なマイクロ開発サービスおよびビルドスタンドアロン、開始するための単一-mスタンドアロン必要にナコスクラスタと言う、クラスタは、高可用性ngxin何か、自信とMySQLを実行するためにnginxのリバースプロキシを使用することをお勧めします。
ポジショニング:
インテリアコンセプトナコスA、
第二に、ナコスの基本的な使用
第三には、次のリボンアセンブリのための準備します
インテリアコンセプトナコス
我々はちょうど我々が唯一の登録最後の時間は、それが私たちのナコスにどのようにサービスに来るときということに基づいていきますが、コールは私たちが言うには、様々な通話と言っていないことを良いナコスクラスタ、クラスタを構築する最後の時間それ(負荷分散アルゴリズムが言ってリボンと呼ばれます)。
①。コール、聞かせてのは、コールオーダーシステム、チェック受注にシンプル、ユーザシステムを呼び出します。
レジストリの設定を追加して、二つのプロジェクトをビルドしSpringboot。最後のブログを設定すると、ここではそれらを繰り返すと、注文サービスのメソッドを記述していない、と述べました。
@RestController パブリック クラスOrderController { (@GetMapping "/ getOrderDataを" ) パブリック文字列getOrderData(){ 戻り "取得したサービスオーダデータ" ; } (@GetMapping "/ getOrderDataBを" ) パブリック文字列getOrderDataB(){ 戻り得られた「受注サービスデータB " ; } }
私はシンプルを書いた、とも呼び出すことができます文字列の場合は、以下の記述を得ることができます。
顧客サービス、書き込みconfig設定で。
@Configuration パブリック クラスクライアントコンフィグ{ @Bean 公共残留テンプレートの残りのテンプレート(){ 返す 新しい休憩テンプレートを(); } }
友人を呼び出して起動します
@RestController パブリック クラスUserControllerで{ @Autowired プライベートRestTemplate restTemplate。 @Autowired プライベートDiscoveryClient discoveryClient。 @GetMapping( "/ getOrder" ) パブリック文字列getOrderData(){ リスト <ServiceInstance> ORDERINFO = discoveryClient.getInstances( "ナコス順序" )。 もし(ヌル == ORDERINFO || orderInfo.isEmpty()){ リターン "用户微服务没有对应的实例可用" 。 } 文字列targetUri = orderInfo.get(0 ).getUri()のtoString()。 ストリングforObject = restTemplate.getForObject(targetUri + "/ getOrderData"、文字列。クラス)。 System.out.println( "forObject =" + forObject)。 返すforObjectを。 } }
このように、最も簡単な通話が実現されます。(無負荷分散アルゴリズムは、私が直接)(0を取得していません)。
②.namespace
ここでは、我々はインターフェイスに対処しなければならない、我々が開発している場合は、テスト環境はナコスを共有し、どのような名前空間を見て異なっている、とあなたは、開発プロセスであり、それは自由に設定可能なテスト環境を推奨されていない、我々は、名前空間を使用する必要があります私たちのスペースを分離します。
私たちのナコスページを開き、名前空間をクリックして、新しい、あなたができる情報を入力します。
分離を実現する方法を、私たちが達成するために、コードを見てみましょう。
まず、設定ファイルで設定名前空間を追加します。名前空間:名前空間のID
spring: application: name: nacos-order cloud: nacos: discovery: server-addr: 192.168.138.119:8848 namespace: 0610f97e-c25d-4f49-bfb8-b340e3584b82 server: port: 8888
订单服务的配置为开发环境,用户服务配置为测试环境的,我们来运行一下代码,理论上应该调用不通的,我们来看一下结果。
现实如此无法调用,也就做到了我们的隔离环境。如果不写namespace,默认是public命名空间。
③.group
group分组,也是用来隔离的,打个比方啊,加入我们的用户服务,订单服务,仓储服务和物流服务四个服务,订单服务中有一个接口叫getData,仓储服务中也有一个接口叫getData,我们的用户服务只想调用到我们的订单服务的getData,不想调用到仓储服务的getData,这时我们可以用group分组来隔离。
我们来看一下配置吧。只需要加入group:分组名称即可,nacos客户端不需要任何设置,这里需要注意的是你的父类项目依赖,2.1.0.RELEASE版本是没有group的,也无法设置group(反正我没找到什么好办法)。需要改配置为2.1.1.RELEASE
<!--spring cloud alibaba依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
spring: application: name: nacos-order cloud: nacos: discovery: server-addr: 192.168.138.119:8848 namespace: 0610f97e-c25d-4f49-bfb8-b340e3584b82 group: pay server: port: 8888
④.还有一个概念是service服务集群,什么意思呢?先上个图。
就是什么呢,我们现在有两组集群,一个是北京的订单服务集群,一个是北京的用户服务集群,还有一个上海的订单服务集群,我们希望北京的用户集群,优先去调用北京的订单系统,上海的优先调用上海的集群服务。并不希望我们跨地区远程调用(如果组内实在没有服务了,也可以调用,但是优先考虑同一集群的)。配置文件如下所示
spring: application: name: nacos-order cloud: nacos: discovery: server-addr: 192.168.138.119:8848 namespace: 0610f97e-c25d-4f49-bfb8-b340e3584b82 group: pay cluster-name: BJ-cluster server: port: 8888
⑤.再就是版本了,也是我知道的最后一个了,比如我们要进行灰度发布了,我们有100台服务集群,但是这次新功能很重要,不能一次性全部更新,我们选择灰度发布,我们选出5台服务作为新版发布的,我们定义为V2,内部接口时不兼容的,所以我们只能要5台新用户服务去调用5台订单服务,原有的95台用户服务还是继续调用那95台订单服务,我们定义为V1。
我们来看一下代码配置
spring: application: name: nacos-order cloud: nacos: discovery: server-addr: 192.168.138.119:8848 namespace: 0610f97e-c25d-4f49-bfb8-b340e3584b82 group: namespace-one cluster-name: BJ-cluster metadata: version: v1 server: port: 8888
剧透一下,nacos是用map来进行隔离的,大致结构式Map<namespace,Map<group::serviceName,Service>>,也是我们为什么cluster-name和版本为什么做不到完全隔离,后面的源码博客会说详细说这个问题的。
总结:
这次我们主要说了nacos的使用,原理?原理还没说,等到我们的源码带着说一下吧,不难,就是一个心跳的问题。nacos要知道namespace、group、cluster-name、版本主要是用来做什么的,什么时候我们该选择什么。下次我们来说一下Ribbon,也就是我们服务直接调用的一个插件。
最进弄了一个公众号,小菜技术,欢迎大家的加入