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|
+
+