登録サービスの発見、春クラウド領事の1セットの構成センター

ユーレカと春の雲コンフィグの前でいえば、今日は、「領事。」万能プレーヤーを導入しました これは、サービスの発見およびサービス構成のためのツールを提供し、HashiCorpが導入されます。言語発達に行き、良い移植性を持っています。クラウド組み込む春は、ユーレカは新バージョンの開発を停止し、より多くの開発者が使用するサービスの発見として登録領事を使用します。

提供領事機能は次のとおりです。

サービス検出

領事は、外部のサービス(例えばSaaS型)が同じを登録しさえするために、簡単に(DNSおよびHTTPインターフェースを介して)サービス登録およびサービスの発見を可能にします。

障害検出

ヘルスチェックは、サービス発見要求は、不健康なホストを防ぐためにルーティングすることができ、かつ簡単に壊れてサービスを(もはや利用可能)にすることができます。

マルチデータセンター

複雑な設定を必要としない領事は、現在のデータセンターその他のサービスデータセンターまたは要求サービスを見つけるために、複数の単純なデータセンターに拡張することができます。

キーと値のストア

柔軟なキーと値のストア、即時通知を通じて長いポーリング設定の変更を達成するために、動的構成、署名、コラボレーション、リーダー選挙やその他の機能を提供します。

春クラウド領事領事は、自動的に設定し、さらにカプセル化されます。

春クラウド領事は、サービス・ディスカバリ・フレームワークとして登録されている既存の春クラウドユーレカを、置き換えることができます。ユーレカ2.xのバージョンは開発を停止している、とあなたは関係ありませんユーレカプロジェクトで使用している場合、政府はまた、当然のことながら、所定の位置に春の雲春の雲の領事を使用することを提案した、ユーレカは何の問題もなく、通常の使用、十分に安定しています。

春クラウド領事は、物流センターとして使用している既存の春クラウドConfig]を、置き換えることができます。

春クラウド領事は、主にサービス登録のために使用され、公式には代替ユーレカを提案し、それが(ネットワークから取られた)んにする方法を見つけるために他のサービスに、次の比較対照でそれを見て、ユーレカまたは他のフレームワークが優位性を持っていない持っている必要がありますが見つかりました:

ファンクションポイント euerka 領事 飼育係 etcd
ヘルスチェックサービス これは、サポートを装備することができます サービスの状態、メモリ、ハードドライブなど (弱)長い接続、キープアライブ ハートビート接続
マルチデータセンター - サポート - -
KVストレージサービス - サポート サポート サポート
一貫性 - ラフト パクシ ラフト
キャップ AP(高可用性、フォールトトレラントパーティション) CA(一致データ、可用性) CP CP
インターフェース(多言語)を使用し HTTP(サイドカー) httpとDNSのサポート クライアント HTTP / grpc
サポートを見ます 増加の大部分をサポートロングポーリング/ 全額/ロングポーリングをサポート サポート ロングポーリングをサポートしています
自己監視 メトリック メトリック - メトリック
セキュリティ - ACL / HTTPS ACL HTTPSサポート(弱いです)
春のクラウド統合 それはサポートしてきました それはサポートしてきました それはサポートしてきました それはサポートしてきました

利点は明白ですので、また、対応するには、いくつかの犠牲をもたらした、データの一貫性と強力を確保するためのアルゴリズムを使用して領事ラフト:

  1. 登録サービスは、ユーレカに比べて遅くなります。いかだの領事プロトコルは、ノードの過半数が正常にのみ考慮登録が成功を書かれている必要があります必要があるため。
  2. リーダーは全体領事の再選時に、ハングアップするとユーザビリティを犠牲に強い整合性を確保するために、使用できません。

領事のインストールと起動

ユーレカと異なるが、領事は、公式ウェブサイト(https://www.consul.io/downloads.html)ダウンロードに行くことができ、インストール別々が必要です。オペレーティングシステムの特定のインストールによっては、公式サイトを参照してください。

領事は、コマンドラインのパラメータの範囲を提供します。領事は、コンフィギュレーションを表示するには、デフォルトのWeb UIインターフェイスを提供します。あなたは8500のWeb UIコンソールポートへのアクセスサーバーを介してアクセスすることができます。

開発プロセスは、我々は命令することができるconsul agent -dev8500あなたが現在領事のすべてのサービスを見ることができます:成功開始後、localhostを訪問し、開発モードを開始します。図は次のとおりです。

検索関連の自己紹介のより展開の生産では、ここだけ春クラウド領事の使用を導入するために使用DEVモードで起動されます。

サービスプロバイダを達成

図1において、スプリングクラウド領事

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-all</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-consul-dependencies</artifactId>
            <version>2.1.0.M2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

構成ファイルbootstrap.yml 2、領事の構成設定は、次のような構成です。

spring:
  cloud:
    consul:
      discovery:
        service-name: consul-provider  ## 服务提供者名称
      host: localhost                  ## consul 所在服务地址
      port: 8500                       ## consul 端口

コンフィギュレーション・ファイルapplication.yml 3、サーバーの構成設定は、次のような構成は以下のとおりです。

spring:
  application:
    name: consul-provider
server:
  port: 5000

endpoints:
  health:
    sensitive: false
  restart:
    enabled: true
  shutdown:
    enabled: true

management:
  security:
    enabled: false

4、二つの方法の試験サービスを書き、RestControllerを追加

@RestController
@Slf4j
public class HelloController {

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping(value = "test")
    public String test(){
        List<String> services = discoveryClient.getServices();
        for(String s : services){
            log.info(s);
        }
        return "hello spring cloud!";
    }

    @GetMapping(value = "nice")
    public String nice(){
        List<String> services = discoveryClient.getServices();
        for(String s : services){
            log.info("gogogo" + s);
        }
        return "nice to meet you!";
    }
}

5、春のブート起動クラス

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

@EnableDiscoveryClientノートには、これはクライアント側であることを示します。

サービスプロバイダ、オープンを起動し、http:// localhost:8500あなたはこのサービスを見ることができます

サービスコンシューマを達成

1、参照関連Mavenのパッケージ、上で参照したサービスプロバイダに加えて、同じパッケージだけでなく、openFeignを参照

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

2、なぜなら消費者へのサービスとしてbootstrap.yml設定は、設定が領事に登録されていないので

spring:
  cloud:
    consul:
      discovery:
        register: false

3、application.yml設定

spring:
  application:
    name: consul-customer
server:
  port: 5001

endpoints:
  health:
    sensitive: false
  restart:
    enabled: true
  shutdown:
    enabled: true

management:
  security:
    enabled: false

4、プロジェクトの起動クラス

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class Application {

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

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

EnableFeignClientsはopenFeignを有効@ @EnableDiscoveryClientノートは、サービスのクライアント側として示して使用します。

5、サービス・インターフェースを作成するopenFeign

@FeignClient(value = "consul-provider")
public interface IHelloService {

    @RequestMapping(value = "/hello")
    String hello();

    @RequestMapping(value = "nice")
    String nice();
}

2つのサービスプロバイダに対応するRESTfulなインターフェースアドレスが提供さ

サービスのうち、RestControllerオープンアクセス・サービス・プロバイダを達成するために6、

@RestController
public class ConsumerController {

    @Autowired
    private LoadBalancerClient loadBalancer;

    @Autowired
    private DiscoveryClient discoveryClient;


    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private IHelloService helloService;

    private final static String SERVICE_NAME = "consul-provider";


    /**
     * 使用普通的 RestTemplate 方法访问服务
     *
     * @return
     */
    @GetMapping(value = "test")
    public Object test() {
        String result = restTemplate.getForObject("http://"+SERVICE_NAME + "/test", String.class);
        System.out.println(result);
        return result;
    }

    /**
     * 使用 openFeign 方式访问服务
     *
     * @return
     */
    @GetMapping(value = "feign")
    public Object feign() {
        String s = helloService.nice();
        return s;
    }
    

    /**
     * 获取所有服务实例
     *
     * @return
     */
    @GetMapping(value = "/services")
    public Object services() {
        return discoveryClient.getInstances(SERVICE_NAME);
    }

    /**
     * 从所有服务中选择一个服务(轮询)
     */
    @GetMapping(value = "/choose")
    public Object choose() {
        return loadBalancer.choose(SERVICE_NAME).getUri().toString();
    }
}

消費者は、プログラムを起動し、対応するRESTfulなインターフェースを訪問し、あなたが対応する結果を得ることができます。

高可用性サービスプロバイダ

マイクロサービスラインが限り同じサービス名など、設定によって次の2つのサービスプロバイダを開始するために、単一のポイントを形成することが最善ではありません、これは同じサービスであることを意味します。

1、変わらずbootstrap.yml構成

spring:
  cloud:
    consul:
      discovery:
        service-name: consul-provider
      host: localhost
      port: 8500

図2に示すように、次のようにapplication.yml修飾

spring:
  profiles:
    active: consul-provider1
endpoints:
  health:
    sensitive: false
  restart:
    enabled: true
  shutdown:
    enabled: true

management:
  security:
    enabled: false

---
spring:
  profiles: consul-provider1
  application:
    name: consul-provider1

server:
  port: 5000

---
spring:
  profiles: consul-provider2
  application:
    name: consul-provider2

server:
  port: 5002

3、開始時間を加えたVMのパラメータの後に。プラスのパラメータは以下の通りでした。

-Dspring.profiles.active =領事-provider1

-Dspring.profiles.active =領事-provider2

サービスポートを起動するためのポート5000と5002で、それぞれのプロバイダ領事プロバイダ

4、最後は依然として消費者の住所RESTfulなインターフェースにアクセスするには、サービスプロバイダーの背景の要求ごとのサービスコールの例を見ることができます。

物流センターとして使用

私たちは、追加の春クラウドコンフィグセンターを構成する能力を提供し、知らないが、その後、領事の使用は、あなたが提供するコンフィギュレーションセンター機能領事を使用することができるので、gitの、SVNまたは外部記憶装置(例えば各種データベース)を満たす必要があり、 Gitは、SVN、データベースを組み合わせて使用​​します。

次に、簡単に春クラウド領事は、物流センターとして使用する方法について説明します。領事YAML支持プロファイルとコンテンツのフォーマットプロパティ、本実施の形態では、例えば、YAMLフォーマットです。

1、参照関連Mavenのパッケージ

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2、bootstrap.yml構成、設定に関するパラメータのメインセット

spring:
  cloud:
    consul:
      config:
        enabled: true    # 启用配置中心
        format: yaml     # 指定配置格式为 yaml
        data-key: mysql_config # 也就是 consul 中 key/value 中的 key
        prefix: config         # 可以理解为配置文件所在的最外层目录
        defaultContext: consul-config  # 可以理解为 mysql_config 的上级目录
      discovery:
        register: false

以下のような構成では、キー/値は、領事に対応しています。

3、application.ymlプロファイルの内容

spring:
  application:
    name: consul-config
server:
  port: 5008

endpoints:
  health:
    sensitive: false
  restart:
    enabled: true
  shutdown:
    enabled: true

management:
  security:
    enabled: false

図4に示すように、プロファイルが定義されているエンティティクラス、指定@ConfigurationProperties注釈指定プレフィックスのMySQL、すなわち、キー/値のプロファイルトップキー。

@Component
@ConfigurationProperties(prefix = "mysql")
public class MySqlComplexConfig {

    public static class UserInfo{

        private String username;

        private String password;

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        @Override
        public String toString() {
            return "UserInfo{" +
                    "username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    '}';
        }
    }

    private String host;

    private UserInfo user;


    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public UserInfo getUser() {
        return user;
    }

    public void setUser(UserInfo user) {
        this.user = user;
    }

}

図5に示すように、出力値のコンテンツを取得するための新しいRestController

@RestController
@Slf4j
public class ConfigController {

    @Autowired
    private MySqlConfig mySqlConfig;

    @Autowired
    private MySqlComplexConfig mySqlComplexConfig;


    @GetMapping(value = "mysqlhost")
    public String getMysqlHost(){
        return mySqlConfig.getHost();
    }

    @GetMapping(value = "mysqluser")
    public String getMysqlUser(){
        log.info(mySqlComplexConfig.getHost());
        MySqlComplexConfig.UserInfo userInfo = mySqlComplexConfig.getUser();
        return userInfo.toString();
    }

}

6、最終的には、設定ファイルの内容を確認するために、RESTfulなインターフェースRestControllerアクセス​​をアプリケーションを起動します。

春の雲コンフィグと比較すると、領事設定コンソールを変更した後、それはすぐに更新される、クラスの春クラウドバスと結合する必要はありません。

送信元アドレスは、
あなたがその書き込みを感じた場合は、「ポイントしてくださいすることができ勧告」バーを

ようこそ注意が時折このシリーズの他の記事を更新する
古时的风筝交換グループに参加できる公開の番号を入力し、

おすすめ

転載: www.cnblogs.com/fengzheng/p/11421110.html