You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2021/03/29 04:53:16 UTC

[servicecomb-pack] 05/05: SCB-2238 add docker compose file support rabbit

This is an automated email from the ASF dual-hosted git repository.

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-pack.git

commit d038ed0056a3d162a414ed0fafc541f15c1f2290
Author: ychen <ye...@freemud.com>
AuthorDate: Sun Mar 28 17:42:05 2021 +0800

    SCB-2238 add docker compose file support rabbit
---
 .../rabbit/RabbitChannelAutoConfiguration.java     |   2 +-
 .../src/main/resources/application.yaml            |  42 +------
 demo/saga-dubbo-demo/docker-compose.rabbit.yaml    | 137 ---------------------
 .../docker-compose.alpha-rabbit.yaml               | 114 +++++++++++++++++
 demo/saga-spring-demo/saga-demo.sh                 |  10 +-
 docs/fsm/eventchannel_zh.md                        |  24 +++-
 6 files changed, 148 insertions(+), 181 deletions(-)

diff --git a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitChannelAutoConfiguration.java b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitChannelAutoConfiguration.java
index e488675..f463f16 100644
--- a/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitChannelAutoConfiguration.java
+++ b/alpha/alpha-fsm/src/main/java/org/apache/servicecomb/pack/alpha/fsm/channel/rabbit/RabbitChannelAutoConfiguration.java
@@ -60,7 +60,7 @@ public class RabbitChannelAutoConfiguration {
 
     @Bean
     @ConditionalOnMissingBean(ActorEventChannel.class)
-    public ActorEventChannel kafkaEventChannel(MetricsService metricsService,
+    public ActorEventChannel rabbitEventChannel(MetricsService metricsService,
                                                @Lazy RabbitMessagePublisher rabbitMessagePublisher) {
         return new org.apache.servicecomb.pack.alpha.fsm.channel.rabbit.RabbitActorEventChannel(metricsService, rabbitMessagePublisher);
     }
diff --git a/alpha/alpha-server/src/main/resources/application.yaml b/alpha/alpha-server/src/main/resources/application.yaml
index 48aad85..14a8a5d 100644
--- a/alpha/alpha-server/src/main/resources/application.yaml
+++ b/alpha/alpha-server/src/main/resources/application.yaml
@@ -117,7 +117,7 @@ alpha:
       key: server.pem
       mutualAuth: true
       clientCert: client.crt
-        
+
 ---
 spring:
   profiles: prd
@@ -148,46 +148,6 @@ spring:
 
 ---
 spring:
-  profiles: rabbit
-  cloud:
-    stream:
-      binders:
-        defaultRabbit:
-          type: rabbit
-          environment:
-            spring:
-              rabbitmq:
-                host: 127.0.0.1
-                username: servicecomb-pack
-                password: H123213PWD
-                virtual-host: servicecomb-pack
-      bindings:
-        service-comb-pack-producer:
-          destination: exchange-service-comb-pack
-          content-type: application/json
-          producer:
-            partition-count: 3
-            partition-key-expression: headers['partitionKey']
-
-        service-comb-pack-consumer:
-          group: group-pack
-          content-type: application/json
-          destination: exchange-service-comb-pack
-          consumer:
-            partitioned: true
-      instance-count: 1
-      instance-index: 0
-alpha:
-  feature:
-    akka:
-      enabled: true
-      channel:
-        type: rabbit
-
-
-
----
-spring:
   profiles: cluster
 
 alpha:
diff --git a/demo/saga-dubbo-demo/docker-compose.rabbit.yaml b/demo/saga-dubbo-demo/docker-compose.rabbit.yaml
deleted file mode 100644
index d23ff06..0000000
--- a/demo/saga-dubbo-demo/docker-compose.rabbit.yaml
+++ /dev/null
@@ -1,137 +0,0 @@
-## ---------------------------------------------------------------------------
-## Licensed to the Apache Software Foundation (ASF) under one or more
-## contributor license agreements.  See the NOTICE file distributed with
-## this work for additional information regarding copyright ownership.
-## The ASF licenses this file to You under the Apache License, Version 2.0
-## (the "License"); you may not use this file except in compliance with
-## the License.  You may obtain a copy of the License at
-##
-##      http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing, software
-## distributed under the License is distributed on an "AS IS" BASIS,
-## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-## See the License for the specific language governing permissions and
-## limitations under the License.
-## ---------------------------------------------------------------------------
-
-##
-#you need to add mysql drive to alpha pom.xml and saga-dubbo-demo pom.xml first
-##
-version: '3.0'
-
-services:
-
-  rabbit:
-    image: "rabbitmq:management"
-    hostname: rabbitmq
-    ports:
-     - "4369:4369"
-     - "5671:5671"
-     - "25672:25672"
-     - "5672:5672"
-     - "15672:15672"
-    environment:
-      RABBITMQ_DEFAULT_USER: servicecomb-pack
-      RABBITMQ_DEFAULT_PASS: H123213PWD
-    networks:
-      -rabbit
-    volumes:
-      - ./rabbitmq.sh:/home/rabbitmq.sh
-
-
-  database:
-    mage: "mysql/mysql-server:5.7"
-    hostname: mysql
-    environment:
-      - MYSQL_ROOT_PASSWORD=password
-      - MYSQL_DATABASE=saga
-      - MYSQL_USER=saga
-      - MYSQL_PASSWORD=password
-
-  alpha:
-    image: "alpha-server:${TAG}"
-    hostname: alpha-server
-    ports:
-      - "8081:8080"
-      - "8091:8090"
-    links:
-      - "database:mysql.servicecomb.io"
-    environment:
-      - JAVA_OPTS=-Dspring.profiles.active=mysql
-      - WAIT_FOR_SERVICES=mysql.servicecomb.io:3306:150
-    depends_on:
-      - database
-
-  servicea:
-    image: "servicea:${TAG}"
-    hostname: servicea
-    links:
-      - "alpha:alpha-server.servicecomb.io"
-      - "database:mysql.servicecomb.io"
-    environment:
-      - JAVA_OPTS=  -Dspring.profiles.active=mysql
-                                -Dspring.datasource.url=jdbc:mysql://mysql.servicecomb.io:3306/saga
-                                -Dspring.datasource.username=saga
-                                -Dspring.datasource.password=password
-                                -Dzookeeper.url=zookeeper.servicecomb.io:2181
-                                -Dserver.port=8071
-                                -Dalpha.cluster.address=alpha-server.servicecomb.io:8080
-                                -Dspring.datasource.initialization-mode=always
-                                -Dspring.cloud.stream.instance-index=0
-      - WAIT_FOR_SERVICES=mysql.servicecomb.io:3306:150,zookeeper.servicecomb.io:2181:150,alpha-server.servicecomb.io:8080:150
-    ports:
-      - "8071:8071"
-    depends_on:
-      - database
-      - zookeeper
-      - alpha
-
-  serviceb:
-    image: "serviceb:${TAG}"
-    hostname: serviceb
-    links:
-      - "alpha:alpha-server.servicecomb.io"
-      - "database:mysql.servicecomb.io"
-    environment:
-      - JAVA_OPTS=  -Dspring.profiles.active=mysql
-                                -Dspring.datasource.url=jdbc:mysql://mysql.servicecomb.io:3306/saga
-                                -Dspring.datasource.username=saga
-                                -Dspring.datasource.password=password
-                                -Dzookeeper.url=zookeeper.servicecomb.io:2181
-                                -Dserver.port=8072
-                                -Dalpha.cluster.address=alpha-server.servicecomb.io:8080
-                                -Dspring.datasource.initialization-mode=always
-                                -Dspring.cloud.stream.instance-index=1
-      - WAIT_FOR_SERVICES=mysql.servicecomb.io:3306:150,zookeeper.servicecomb.io:2181:150,alpha-server.servicecomb.io:8080:150
-    ports:
-      - "8072:8072"
-    depends_on:
-      - database
-      - zookeeper
-      - alpha
-
-  servicec:
-    image: "servicec:${TAG}"
-    hostname: servicec
-    links:
-      - "alpha:alpha-server.servicecomb.io"
-      - "database:mysql.servicecomb.io"
-    environment:
-      - JAVA_OPTS=  -Dspring.profiles.active=mysql
-                                -Dspring.datasource.url=jdbc:mysql://mysql.servicecomb.io:3306/saga
-                                -Dspring.datasource.username=saga
-                                -Dspring.datasource.password=password
-                                -Dzookeeper.url=zookeeper.servicecomb.io:2181
-                                -Dserver.port=8073
-                                -Dalpha.cluster.address=alpha-server.servicecomb.io:8080
-                                -Dspring.datasource.initialization-mode=always
-                                -Dspring.cloud.stream.instance-index=2
-      - WAIT_FOR_SERVICES=mysql.servicecomb.io:3306:150,zookeeper.servicecomb.io:2181:150,alpha-server.servicecomb.io:8080:150
-    ports:
-      - "8073:8073"
-    depends_on:
-      - database
-      - zookeeper
-      - alpha
-
diff --git a/demo/saga-spring-demo/docker-compose.alpha-rabbit.yaml b/demo/saga-spring-demo/docker-compose.alpha-rabbit.yaml
new file mode 100644
index 0000000..8253d2b
--- /dev/null
+++ b/demo/saga-spring-demo/docker-compose.alpha-rabbit.yaml
@@ -0,0 +1,114 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License.  You may obtain a copy of the License at
+##
+##      http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+##
+#you need to add mysql drive to alpha pom.xml and saga-dubbo-demo pom.xml first
+##
+version: '3.0'
+
+services:
+
+  rabbit:
+    image: "rabbitmq:management"
+    hostname: rabbitmq
+    ports:
+     - "4369:4369"
+     - "5671:5671"
+     - "25672:25672"
+     - "5672:5672"
+     - "15672:15672"
+    environment:
+      RABBITMQ_DEFAULT_USER: servicecomb-pack
+      RABBITMQ_DEFAULT_PASS: H123213PWD
+    volumes:
+      - ./rabbitmq.sh:/home/rabbitmq.sh
+
+
+  elasticsearch:
+    image: elasticsearch:6.6.2
+    hostname: elasticsearch
+    container_name: elasticsearch
+    environment:
+      - "ES_JAVA_OPTS=-Xmx256m -Xms256m"
+      - "discovery.type=single-node"
+      - "cluster.routing.allocation.disk.threshold_enabled=false"
+    ulimits:
+      memlock:
+        soft: -1
+        hard: -1
+    ports:
+      - 9200:9200
+      - 9300:9300
+  redis:
+    image: redis:5.0.5-alpine
+    hostname: redis
+    container_name: redis
+    ports:
+      - 6379:6379
+
+  database:
+    image: "mysql/mysql-server:5.7"
+    hostname: mysql
+    environment:
+      - MYSQL_ROOT_PASSWORD=password
+      - MYSQL_DATABASE=saga
+      - MYSQL_USER=saga
+      - MYSQL_PASSWORD=password
+    ports:
+      - "3306:3306"
+
+  alpha:
+    image: "alpha-server:${TAG}"
+    hostname: alpha-server
+    links:
+      - "database:mysql.servicecomb.io"
+      - "rabbit:rabbitmq.servicecomb.io"
+      - "elasticsearch:elasticsearch.servicecomb.io"
+      - "redis:redis.servicecomb.io"
+    environment:
+      - JAVA_OPTS=-Dspring.profiles.active=mysql -Dspring.datasource.username=saga
+        -Dspring.datasource.password=password -Dspring.datasource.url=jdbc:mysql://mysql.servicecomb.io:3306/saga?useSSL=false
+        -Dspring.cloud.stream.instance-index=0
+        -Dspring.cloud.stream.instance-count=1
+        -Dspring.cloud.stream.binders.defaultRabbit.type=rabbit
+        -Dspring.cloud.stream.bindings.service-comb-pack-producer.producer.partition-count=1
+        -Dspring.cloud.stream.bindings.service-comb-pack-producer.producer.partition-key-expression=headers['partitionKey']
+        -Dspring.cloud.stream.bindings.service-comb-pack-consumer.group=group-pack
+        -DDspring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.virtual-host=servicecomb-pack
+        -DDspring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.host=rabbitmq.servicecomb.io
+        -Dspring.cloud.stream.bindings.service-comb-pack-consumer.content-type=application/json
+        -Dspring.cloud.stream.bindings.service-comb-pack-consumer.destination=exchange-service-comb-pack
+        -Dspring.cloud.stream.bindings.service-comb-pack-consumer.consumer.partitioned=true
+        -Dspring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.virtual-host=servicecomb-pack
+        -Dspring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.host=rabbitmq.servicecomb.io
+        -Dspring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.username=servicecomb-pack
+        -Dspring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.password=H123213PWD
+        -Dspring.cloud.stream.bindings.service-comb-pack-producer.destination=exchange-service-comb-pack
+        -Dspring.cloud.stream.bindings.service-comb-pack-producer.content-type=application/json
+        -Dspring.data.elasticsearch.cluster-name=docker-cluster
+        -Dspring.data.elasticsearch.cluster-nodes=elasticsearch.servicecomb.io:9300
+        -DakkaConfig.akka-persistence-redis.redis.host=redis.servicecomb.io
+        -DakkaConfig.akka-persistence-redis.redis.port=6379
+        -Dalpha.feature.akka.enabled=true
+        -Dalpha.feature.akka.channel.type=rabbit
+        -Dlogging.level.org.apache.servicecomb.pack.alpha.fsm.channel.rabbit.RabbitMessagePublisher=debug
+      - WAIT_FOR_SERVICES=mysql.servicecomb.io:3306:150
+    depends_on:
+      - database
+      - rabbit
+      - elasticsearch
+      - redis
diff --git a/demo/saga-spring-demo/saga-demo.sh b/demo/saga-spring-demo/saga-demo.sh
index 569a11b..56e0f39 100755
--- a/demo/saga-spring-demo/saga-demo.sh
+++ b/demo/saga-spring-demo/saga-demo.sh
@@ -18,7 +18,7 @@
 service=saga-demo
 
 show_usage() {
-  echo "Usage: $0 {up|up-alpha|up-demo|up-mysql|down}" >&2
+  echo "Usage: $0 {up|up-alpha|up-demo|up-mysql|down|up-rabbit}" >&2
 }
 
 fetch_version() {
@@ -65,6 +65,12 @@ case $1 in
     TAG=$version docker-compose -f docker-compose.yaml -f docker-compose.mysql.yaml up
     exit $?
   ;;
+  up-rabbit)
+    fetch_version
+        echo "Starting ${service}:${version}"
+    TAG=$version docker-compose -f docker-compose.alpha-rabbit.yaml up
+    exit $?
+  ;;
 
   down)
     fetch_version
@@ -73,6 +79,8 @@ case $1 in
     exit $?
   ;;
 
+
+
   *)
     show_usage
     exit 2
diff --git a/docs/fsm/eventchannel_zh.md b/docs/fsm/eventchannel_zh.md
index 3fcabcd..207eb93 100644
--- a/docs/fsm/eventchannel_zh.md
+++ b/docs/fsm/eventchannel_zh.md
@@ -1,11 +1,12 @@
 # 事件通道
 
-Alpha 收到 Omeag 发送的事件后放入事件通道等待 Akka 处理,事件通道有两种实现方式,一种是内存通道另一种是 Kafka 通道
+Alpha 收到 Omeag 发送的事件后放入事件通道等待 Akka 处理,事件通道有三种实现方式,一种是内存通道另外是 Kafka,Rabbit 通道
 
 | 通道类型 | 模式 | 说明                                                         |
 | -------- | ---- | ------------------------------------------------------------ |
 | memory   | 单例 | 使用内存作为数据通道,不建议在生产环境使用                   |
 | kafka    | 集群 | 使用 Kafka 作为数据通道,使用全局事务ID作为分区策略,集群中的所有节点同时工作,可水平扩展,当配置了 spring.profiles.active=prd,cluster 参数后默认就使用 kafka 通道 |
+| rabbit    | 集群 | 使用 rabbit 作为数据通道,使用全局事务ID作为分区策略, 由于rabbit 原生不支持分区,所以引用了  [spring-cloud-stream](https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit)  |
 
  可以使用参数 `alpha.feature.akka.channel.type` 配置通道类型
 
@@ -30,5 +31,26 @@ Alpha 收到 Omeag 发送的事件后放入事件通道等待 Akka 处理,事
 | kafka.numPartitions                     | 6        |                                             |
 | kafka.replicationFactor                 | 1        |                                             |
 
+- Rabbit 通道参数
 
+| 参数名                                   | 参数值   | 说明                                        |
+| --------------------------------------- | -------- | ------------------------------------------- |
+| alpha.feature.akka.channel.type         | rabbit   |                                             |
+| spring.cloud.stream.instance-index      | 0       |  分区索引| 
+| spring.cloud.stream.instance-count       | 1       |                                             |
+| spring.cloud.stream.bindings.service-comb-pack-producer.producer.partition-count| 1|分区数量,分区数量需要与alpha-server保持一致|
+| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.virtual-host| servicecomb-pack |     |
+| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.host | rabbitmq.servicecomb.io | |
+| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.username | servicecomb-pack | |
+| spring.cloud.stream.binders.defaultRabbit.environment.spring.rabbitmq.password | H123213PWD ||
+|spring.cloud.stream.binders.defaultRabbit.type|rabbit|
+|spring.cloud.stream.bindings.service-comb-pack-producer.destination|exchange-service-comb-pack||
+|spring.cloud.stream.bindings.service-comb-pack-producer.content-type|application/json|
+|spring.cloud.stream.bindings.service-comb-pack-producer.producer.partition-key-expression|headers['partitionKey'] | 分区表达式
+|spring.cloud.stream.bindings.service-comb-pack-consumer.group|group-pack|
+|spring.cloud.stream.bindings.service-comb-pack-consumer.content-type|application/json|
+|spring.cloud.stream.bindings.service-comb-pack-consumer.destination|exchange-service-comb-pack|
+spring.cloud.stream.bindings.service-comb-pack-consumer.consumer.partitioned|true|
+
+