領事クラスタは、ゲートウェイサービスに参加します
アーキテクチャ図
外部ゲートウェイサービス消費者サービス、生産者の内部を介して外部のアプリケーションやウェブサイト自体も内部の内部ゲートウェイサービス消費を通じて消費者、消費者の行動かもしれません。
内部一つ一つの外部ゲートウェイと、単一のサーバーに展開ゲートウェイ領事Clientは、このゲートウェイサーバに少なくとも2つのグループが、問い合わせの後に使用する外部フロントゲートウェイ負荷分散装置、内部使用領事クライアントゲートウェイサービス、内部ゲートウェイがあるでしょう責任領事によるロードバランシング。
デモ環境をセットアップします
で領事Cluster Serverの+クライアントモードごとに、我々は、更新とゲートウェイサービスと顧客サービス、我々は唯一のゲートウェイサービスをシミュレートするために開始デモ環境を起動します。
ばねクラウドゲートウェイとばねクラウド領事消費者の両方のコンテナを削除します。
docker pull bluersw/spring-cloud-gateway:v3
docker run --name=spring-cloud-gateway -d -p 9000:9000 bluersw/spring-cloud-gateway:v3 /opt/consul/./consul agent -data-dir=/opt/consul/data -config-dir=/opt/consul/config -node=gw-cc -join 172.17.0.2
docker exec spring-cloud-gateway /usr/local/java/bin/java -jar /opt/spring-cloud-gateway-0.0.1-SNAPSHOT.jar
docker pull bluersw/spring-cloud-consul-consumer:v3
docker run --name=spring-cloud-consul-consumer -d -p 9003:9003 bluersw/spring-cloud-consul-consumer:v3 /opt/consul/./consul agent -data-dir=/opt/consul/data -config-dir=/opt/consul/config -node=consumer-cc -join 172.17.0.2
docker exec spring-cloud-consul-consumer /usr/local/java/bin/java -jar /opt/spring-cloud-consul-client-0.0.1-SNAPSHOT.jar
TAG:V3バージョンゲートウェイと消費者ミラーリングコンテンツ
(また、領事クライアントに登録)以下のように、ばねクラウドゲートウェイプロジェクトの設定ファイルは、主に高めるために、変更された好む-IPアドレスまたはIPアドレスを領事サービスを取得することはできません。
server:
port: 9000
spring:
cloud:
consul:
host: 127.0.0.1
port: 8500
discovery:
register: true
prefer-ip-address: true
health-check-path: /actuator/health
gateway:
routes:
- id: test_route
uri: lb://service-provider
predicates:
- Path=/service-provider/{segment}
filters:
- SetPath=/{segment}
- name: Hystrix
args:
name: service-provider-fallback
fallbackUri: forward:/service-provider-error
- name: Retry
args:
retries: 3
statuses: BAD_GATEWAY,BAD_REQUEST
default-filters:
- name: Hystrix
args:
name: fallbackcmd
fallbackUri: forward:/default-error
application:
name: PC-ApiGateWay
他のサービスゲートウェイサービスコールの内部消費をシミュレートするために、春・クラウド・領事・クライアントプロジェクト(春・クラウド・領事-消費者が ) 次のコードを追加します
装うスタイルのプロキシクラスを作成します
//网关服务
@FeignClient(name="PC-ApiGateWay")
public interface GatewayRemote {
//网关上的请求地址和外部用浏览器浏览的路径相同
@RequestMapping("/service-provider/hello")
public String Hello(@RequestParam String name);
}
コントローラは、以下の方法で増加しています。
@Autowired
GatewayRemote gatewayRemote;
@RequestMapping("/TestGW")
public String TestGW(){
String first = gatewayRemote.Hello("first-SWS");
String second = gatewayRemote.Hello("second-SWS");
return first + " | " + second;
}
アナログ外部アクセス
ブラウザで直接アクセス127.0.0.1:9000/service-provider/hello?name=sws、サービスリターン情報を取得します:
アナログ内部アクセス
ブラウザでアクセス127.0.0.1:9003/TestGWは、サービスリターン情報を取得します:
ソース
Githubのリポジトリます。https://github.com/sunweisheng/spring-cloud-example