非springエンジニアリングspring cloud config構成センターを使用する

6479 ワード

非springエンジニアリングspring cloud config構成センターを使用する
  • 最近spring cloudの使用を勉強して、自分でspring cloud eurekaサーバーをサービスの登録と発見センターとして構築して、それからspring cloud config server端とclient端を構築して、rabbit mqをメッセージバスとして使用して、Git倉庫の中の内容の修正がアプリケーションの属性の更新をトリガすることを実現します.参照可能http://blog.didispace.com/springcloud7/ここ今、私たちのアプリケーションシーンといえば、これまでのプロジェクトはspring cloudに関連するプロジェクトではなかったので、このような構成も使いたいならどうすればいいのでしょうか.多くの学生と同じように、私の最初の考えはタイミングタスクです.私たちのプロジェクトでは、config serverのインタフェースを呼び出し、データを取得し、ファイル
  • に保存するタイミングタスクを書きます.
    これも当然解決策ですが、複数のサーバがある場合、タイミングで取るとconfig server側にとって大きなプレッシャーになるという問題があります.では、より良い解決策はありますか?まずこれを見て!非spring 工程使用 spring cloud config配置中心_第1张图片は、上述の図のように、Gitウェアハウス、Config Server、およびマイクロサービス「Service A」の3つのインスタンスを含み、これら3つのインスタンスにはSpring Cloud Busが導入されているため、RabbitMQのメッセージバスに接続されている.
    システムを起動すると、「Service A」の3つのインスタンスがコンフィギュレーション情報を取得するためにコンフィギュレーションサーバを要求し、コンフィギュレーションのルールに従ってGitウェアハウスからコンフィギュレーション情報を取得して戻ります.
    gitウェアハウス内のプロファイル情報を変更する場合、/bus/refresh(post方式)を呼び出すだけで、すべてのインスタンスのプロファイルリフレッシュを完了することができます.これはどのように実現されたのでしょうか.
    注意してください.コンフィグ・サーバ、および3つのサービスAのインスタンスは、Spring Cloud Busを導入しているので、RabbitMQのメッセージ・バスに接続されています.
    だから大胆な推測はConfig Serverサービスが起動する時、1つのtopicを作成して、その他のサービスはすべてこのtopicを購読して、それから私達がbus/refreshを呼び出す時、すべてのこのtopicを購読するサービスはすべてconfig serverの上でプロファイルを読み直します.
    rabbitmqサーバで検証してみましょう.非spring 工程使用 spring cloud config配置中心_第2张图片名前は少し関連しているように見えます.非spring 工程使用 spring cloud config配置中心_第3张图片これが私たちが起動したサービスです.もう一つ図を見てください.非spring 工程使用 spring cloud config配置中心_第4张图片間違いない、それです.
              ,        topic ,    bus/refresh ,   config server            ,    ok ,   .
    
          .
    
        import com.alibaba.fastjson.JSONObject;
    import com.rabbitmq.client.Channel;
    import com.rabbitmq.client.Connection;
    import com.rabbitmq.client.ConnectionFactory;
    import com.rabbitmq.client.QueueingConsumer;
    
    //  rabbit mq     springCloudBus topic
    public class MQUtil {
        private static final String EXCHANGE_NAME = "springCloudBus";
    
        public static void consumer() throws Exception {
    
            //        
            ConnectionFactory factory = new ConnectionFactory();
            factory.setHost("localhost");
            factory.setUsername("test");
            factory.setPassword("test");
            Connection connection = factory.newConnection();
            Channel channel = connection.createChannel();
            //      
            channel.exchangeDeclare(EXCHANGE_NAME, "topic", true);
            //         
            String queueName = channel.queueDeclare().getQueue();
            //      springCloudBus     
            channel.queueBind(queueName, EXCHANGE_NAME, "#");
    
            QueueingConsumer consumer = new QueueingConsumer(channel);
            channel.basicConsume(queueName, true, consumer);
    
            while (true) {
                QueueingConsumer.Delivery delivery = consumer.nextDelivery();
                String message = new String(delivery.getBody());
                String routingKey = delivery.getEnvelope().getRoutingKey();
                JSONObject json = JSONObject.parseObject(message);
                //   
                String type = json.getString("type");
                //             
                if ("RefreshRemoteApplicationEvent".equals(type)) {
                    System.out.println("        ");
                }
            }
        }
    
        public static void main(String[] args) throws Exception {
            consumer();
        }
    }
    

    非spring 工程使用 spring cloud config配置中心_第5张图片
    やった具体的な処理方法は書かない.O(∩∩)Oハハ~.