非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側にとって大きなプレッシャーになるという問題があります.では、より良い解決策はありますか?まずこれを見て!は、上述の図のように、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サーバで検証してみましょう.名前は少し関連しているように見えます.これが私たちが起動したサービスです.もう一つ図を見てください.間違いない、それです.
やった具体的な処理方法は書かない.O(∩∩)Oハハ~.
これも当然解決策ですが、複数のサーバがある場合、タイミングで取るとconfig server側にとって大きなプレッシャーになるという問題があります.では、より良い解決策はありますか?まずこれを見て!は、上述の図のように、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サーバで検証してみましょう.名前は少し関連しているように見えます.これが私たちが起動したサービスです.もう一つ図を見てください.間違いない、それです.
, 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();
}
}
やった具体的な処理方法は書かない.O(∩∩)Oハハ~.