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 <yeliang.ch...@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| + +