From 54c7b6962653d2c9711cf3ce79281df54627941d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A1=B9=E5=8D=87?= <xiangsheng.gh@alibaba-inc.com>
Date: Mon, 6 May 2019 10:26:16 +0800
Subject: [PATCH] Add more docs and modules

---
 README.MD                                     |  8 +++
 bootstrap/pom.xml                             | 35 +++++++++++++
 .../java/com/aliware/tianchi/GatewayApp.java  | 16 ++++++
 .../java/com/aliware/tianchi/ProviderApp.java | 17 +++++++
 internal-dubbo/pom.xml                        |  8 +++
 internal-gateway/pom.xml                      |  6 +++
 {service => internal-service}/pom.xml         |  0
 .../service-api/pom.xml                       |  0
 .../com/aliware/tianchi/HashInterface.java    |  0
 internal-service/service-consumer/pom.xml     | 26 ++++++++++
 .../java/com/aliware/tianchi/MyConsumer.java  | 19 +++++++
 .../src/main/resources/dubbo-consumer.xml     | 18 +++++++
 .../service-provider/pom.xml                  |  2 +-
 .../com/aliware/tianchi/HashServiceImpl.java  |  2 +-
 .../src/main/resources/dubbo-provider.xml     | 21 ++++++++
 pom.xml                                       | 51 ++++++++++++++++++-
 .../com/aliware/tianchi/HashInterface.java    | 10 ----
 src/main/java/com/aliware/GatewayApp.java     | 10 ----
 src/main/java/com/aliware/ProviderApp.java    | 10 ----
 workspace/README.md                           |  3 ++
 workspace/pom.xml                             | 20 ++++++++
 .../workspace-gateway}/pom.xml                |  4 +-
 workspace/workspace-provider/pom.xml          | 14 +++++
 23 files changed, 265 insertions(+), 35 deletions(-)
 create mode 100644 bootstrap/pom.xml
 create mode 100644 bootstrap/src/main/java/com/aliware/tianchi/GatewayApp.java
 create mode 100644 bootstrap/src/main/java/com/aliware/tianchi/ProviderApp.java
 rename {service => internal-service}/pom.xml (100%)
 rename {service => internal-service}/service-api/pom.xml (100%)
 rename {service => internal-service}/service-api/src/main/java/com/aliware/tianchi/HashInterface.java (100%)
 create mode 100644 internal-service/service-consumer/pom.xml
 create mode 100644 internal-service/service-consumer/src/main/java/com/aliware/tianchi/MyConsumer.java
 create mode 100644 internal-service/service-consumer/src/main/resources/dubbo-consumer.xml
 rename {service => internal-service}/service-provider/pom.xml (93%)
 rename {service => internal-service}/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java (94%)
 create mode 100644 internal-service/service-provider/src/main/resources/dubbo-provider.xml
 delete mode 100644 service/src/main/java/com/aliware/tianchi/HashInterface.java
 delete mode 100644 src/main/java/com/aliware/GatewayApp.java
 delete mode 100644 src/main/java/com/aliware/ProviderApp.java
 create mode 100644 workspace/README.md
 create mode 100644 workspace/pom.xml
 rename {service/service-consumer => workspace/workspace-gateway}/pom.xml (82%)
 create mode 100644 workspace/workspace-provider/pom.xml

diff --git a/README.MD b/README.MD
index 5214bd2..7fdce7b 100644
--- a/README.MD
+++ b/README.MD
@@ -44,6 +44,14 @@ TBD
 
 TBD
 
+### 项目结构
+
+- bootstrap 程序启动入口,不允许修改,评测时不依赖选手编译的 jar 包;
+- internal-dubbo dubbo 依赖,不允许修改,评测时不依赖选手编译的 jar 包;
+- internal-gateway gateway 依赖,不允许修改,评测时不依赖选手编译的 jar 包;
+- internal-service 服务的接口定义和实现,不允许修改,评测时不依赖选手编译的 jar 包;
+- workspace 选手进行开发的模块
+
 ### 开发接口
 
 TBD
diff --git a/bootstrap/pom.xml b/bootstrap/pom.xml
new file mode 100644
index 0000000..7311cef
--- /dev/null
+++ b/bootstrap/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>adaptive-loadbalance</artifactId>
+        <groupId>com.aliware.tianchi</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>bootstrap</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.aliware.tianchi</groupId>
+            <artifactId>workspace-gateway</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliware.tianchi</groupId>
+            <artifactId>workspace-provider</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliware.tianchi</groupId>
+            <artifactId>service-provider</artifactId>
+        </dependency>
+    </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/bootstrap/src/main/java/com/aliware/tianchi/GatewayApp.java b/bootstrap/src/main/java/com/aliware/tianchi/GatewayApp.java
new file mode 100644
index 0000000..f3d1dec
--- /dev/null
+++ b/bootstrap/src/main/java/com/aliware/tianchi/GatewayApp.java
@@ -0,0 +1,16 @@
+package com.aliware.tianchi;
+
+import java.io.IOException;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * @author guohaoice@gmail.com
+ */
+public class GatewayApp {
+  public static void main(String[] args) throws IOException {
+    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-provider.xml"});
+    context.start();
+
+    System.in.read(); // press any key to exit
+  }
+}
diff --git a/bootstrap/src/main/java/com/aliware/tianchi/ProviderApp.java b/bootstrap/src/main/java/com/aliware/tianchi/ProviderApp.java
new file mode 100644
index 0000000..a8a203a
--- /dev/null
+++ b/bootstrap/src/main/java/com/aliware/tianchi/ProviderApp.java
@@ -0,0 +1,17 @@
+package com.aliware.tianchi;
+
+import java.io.IOException;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * @author guohaoice@gmail.com
+ */
+public class ProviderApp {
+
+  public static void main(String[] args) throws IOException {
+    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:dubbo-provider.xml"});
+    context.start();
+    System.in.read(); // press any key to exit
+  }
+
+}
diff --git a/internal-dubbo/pom.xml b/internal-dubbo/pom.xml
index a4be6d0..9c4730d 100644
--- a/internal-dubbo/pom.xml
+++ b/internal-dubbo/pom.xml
@@ -10,4 +10,12 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>internal-dubbo</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.dubbo</groupId>
+            <artifactId>dubbo</artifactId>
+            <version>3.0.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
 </project>
\ No newline at end of file
diff --git a/internal-gateway/pom.xml b/internal-gateway/pom.xml
index cc5ce9a..dfdbf98 100644
--- a/internal-gateway/pom.xml
+++ b/internal-gateway/pom.xml
@@ -11,5 +11,11 @@
 
     <artifactId>internal-gateway</artifactId>
 
+    <dependencies>
+        <dependency>
+            <groupId>com.aliware.tianchi</groupId>
+            <artifactId>internal-dubbo</artifactId>
+        </dependency>
+    </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/service/pom.xml b/internal-service/pom.xml
similarity index 100%
rename from service/pom.xml
rename to internal-service/pom.xml
diff --git a/service/service-api/pom.xml b/internal-service/service-api/pom.xml
similarity index 100%
rename from service/service-api/pom.xml
rename to internal-service/service-api/pom.xml
diff --git a/service/service-api/src/main/java/com/aliware/tianchi/HashInterface.java b/internal-service/service-api/src/main/java/com/aliware/tianchi/HashInterface.java
similarity index 100%
rename from service/service-api/src/main/java/com/aliware/tianchi/HashInterface.java
rename to internal-service/service-api/src/main/java/com/aliware/tianchi/HashInterface.java
diff --git a/internal-service/service-consumer/pom.xml b/internal-service/service-consumer/pom.xml
new file mode 100644
index 0000000..81633ad
--- /dev/null
+++ b/internal-service/service-consumer/pom.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>service</artifactId>
+        <groupId>com.aliware.tianchi</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>service-consumer</artifactId>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.aliware.tianchi</groupId>
+            <artifactId>service-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
+    </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/internal-service/service-consumer/src/main/java/com/aliware/tianchi/MyConsumer.java b/internal-service/service-consumer/src/main/java/com/aliware/tianchi/MyConsumer.java
new file mode 100644
index 0000000..162e5b3
--- /dev/null
+++ b/internal-service/service-consumer/src/main/java/com/aliware/tianchi/MyConsumer.java
@@ -0,0 +1,19 @@
+package com.aliware.tianchi;
+
+import java.io.IOException;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * @author guohaoice@gmail.com
+ */
+public class MyConsumer {
+  public static void main(String[] args) throws IOException {
+    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:dubbo-consumer.xml"});
+    context.start();
+    HashInterface bean = context.getBean(HashInterface.class);
+    for (int i = 0; i < 10; i++) {
+      System.out.println(bean.hash("hahaha"));
+    }
+    System.in.read(); // press any key to exit
+  }
+}
diff --git a/internal-service/service-consumer/src/main/resources/dubbo-consumer.xml b/internal-service/service-consumer/src/main/resources/dubbo-consumer.xml
new file mode 100644
index 0000000..f25a6e9
--- /dev/null
+++ b/internal-service/service-consumer/src/main/resources/dubbo-consumer.xml
@@ -0,0 +1,18 @@
+<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
+       xmlns="http://www.springframework.org/schema/beans"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
+
+    <!-- consumer's application name, used for tracing dependency relationship (not a matching criterion),
+    don't set it same as provider -->
+    <dubbo:application name="demo-consumer"/>
+
+    <!-- use multicast registry center to discover service -->
+    <!--<dubbo:registry address="zookeeper://127.0.0.1:2181"/>-->
+
+    <!-- generate proxy for the remote service, then demoService can be used in the same way as the
+    local regular interface -->
+    <dubbo:reference id="directService" check="false" interface="com.aliware.tianchi.HashInterface" url="localhost:20880"/>
+
+</beans>
\ No newline at end of file
diff --git a/service/service-provider/pom.xml b/internal-service/service-provider/pom.xml
similarity index 93%
rename from service/service-provider/pom.xml
rename to internal-service/service-provider/pom.xml
index 53c8fab..5e390fb 100644
--- a/service/service-provider/pom.xml
+++ b/internal-service/service-provider/pom.xml
@@ -15,8 +15,8 @@
         <dependency>
             <groupId>com.aliware.tianchi</groupId>
             <artifactId>service-api</artifactId>
-            <version>${project.version}</version>
         </dependency>
+
     </dependencies>
 
 
diff --git a/service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java b/internal-service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java
similarity index 94%
rename from service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java
rename to internal-service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java
index 4df1288..35bd7d0 100644
--- a/service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java
+++ b/internal-service/service-provider/src/main/java/com/aliware/tianchi/HashServiceImpl.java
@@ -36,7 +36,7 @@ public class HashServiceImpl implements HashInterface {
     double cdf = 0;
     while (u >= cdf) {
       x++;
-      cdf = 1 - Math.exp(-1.0 * 1 / averageRTT * x);
+      cdf = 1 - Math.exp(-1.0D * 1 / averageRTT * x);
     }
     return x;
   }
diff --git a/internal-service/service-provider/src/main/resources/dubbo-provider.xml b/internal-service/service-provider/src/main/resources/dubbo-provider.xml
new file mode 100644
index 0000000..fb14e69
--- /dev/null
+++ b/internal-service/service-provider/src/main/resources/dubbo-provider.xml
@@ -0,0 +1,21 @@
+<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
+       xmlns="http://www.springframework.org/schema/beans"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
+       http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
+
+    <!-- provider's application name, used for tracing dependency relationship -->
+    <dubbo:application name="demo-provider"/>
+    <!-- use multicast registry center to export service -->
+    <dubbo:registry address="multicast://224.5.6.7:1234"/>
+    <!-- use dubbo protocol to export service on port 20880 -->
+    <dubbo:protocol name="dubbo" port="20880"/>
+    <!-- service implementation, as same as regular local bean -->
+    <bean id="demoService" class="com.aliware.tianchi.HashServiceImpl">
+        <constructor-arg index="0" value="10"/>
+        <constructor-arg index="1" value="10000000"/>
+        <constructor-arg index="2" value="salt-value"/>
+    </bean>
+    <!-- declare the service interface to be exported -->
+    <dubbo:service interface="com.aliware.tianchi.HashInterface" ref="demoService"/>
+</beans>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 3055949..9382524 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,6 +9,53 @@
     <packaging>pom</packaging>
     <version>1.0.0</version>
 
+    <dependencyManagement>
+        <dependencies>
+            <!--internal start-->
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>internal-dubbo</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>internal-gateway</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>service-api</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>service-consumer</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>service-provider</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>workspace-provider</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.aliware.tianchi</groupId>
+                <artifactId>workspace-gateway</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <!--internal end-->
+
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-context</artifactId>
+                <version>4.3.20.RELEASE</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
     <build>
         <plugins>
             <plugin>
@@ -26,6 +73,8 @@
     <modules>
         <module>internal-dubbo</module>
         <module>internal-gateway</module>
-        <module>service</module>
+        <module>internal-service</module>
+        <module>bootstrap</module>
+        <module>workspace</module>
     </modules>
 </project>
\ No newline at end of file
diff --git a/service/src/main/java/com/aliware/tianchi/HashInterface.java b/service/src/main/java/com/aliware/tianchi/HashInterface.java
deleted file mode 100644
index 5665174..0000000
--- a/service/src/main/java/com/aliware/tianchi/HashInterface.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.aliware.tianchi;
-
-/**
- * @author guohaoice@gmail.com
- */
-public interface HashInterface {
-
-    int hash(String input);
-
-}
diff --git a/src/main/java/com/aliware/GatewayApp.java b/src/main/java/com/aliware/GatewayApp.java
deleted file mode 100644
index f00f00d..0000000
--- a/src/main/java/com/aliware/GatewayApp.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.aliware;
-
-/**
- * @author guohaoice@gmail.com
- */
-public class GatewayApp {
-  public static void main(String[] args) {
-    //
-  }
-}
diff --git a/src/main/java/com/aliware/ProviderApp.java b/src/main/java/com/aliware/ProviderApp.java
deleted file mode 100644
index bd5778a..0000000
--- a/src/main/java/com/aliware/ProviderApp.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.aliware;
-
-/**
- * @author guohaoice@gmail.com
- */
-public class ProviderApp {
-  public static void main(String[] args) {
-    //
-  }
-}
diff --git a/workspace/README.md b/workspace/README.md
new file mode 100644
index 0000000..b89adcf
--- /dev/null
+++ b/workspace/README.md
@@ -0,0 +1,3 @@
+# Workspace
+
+选手在这个 module 下开发,其他 module 不允许修改。
\ No newline at end of file
diff --git a/workspace/pom.xml b/workspace/pom.xml
new file mode 100644
index 0000000..5230c79
--- /dev/null
+++ b/workspace/pom.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>adaptive-loadbalance</artifactId>
+        <groupId>com.aliware.tianchi</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>workspace</artifactId>
+    <packaging>pom</packaging>
+    <modules>
+        <module>workspace-gateway</module>
+        <module>workspace-provider</module>
+    </modules>
+
+
+</project>
\ No newline at end of file
diff --git a/service/service-consumer/pom.xml b/workspace/workspace-gateway/pom.xml
similarity index 82%
rename from service/service-consumer/pom.xml
rename to workspace/workspace-gateway/pom.xml
index ba938d8..9a1c6a7 100644
--- a/service/service-consumer/pom.xml
+++ b/workspace/workspace-gateway/pom.xml
@@ -3,13 +3,13 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>service</artifactId>
+        <artifactId>workspace</artifactId>
         <groupId>com.aliware.tianchi</groupId>
         <version>1.0.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>service-consumer</artifactId>
+    <artifactId>workspace-gateway</artifactId>
 
 
 </project>
\ No newline at end of file
diff --git a/workspace/workspace-provider/pom.xml b/workspace/workspace-provider/pom.xml
new file mode 100644
index 0000000..7d0f8a3
--- /dev/null
+++ b/workspace/workspace-provider/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>workspace</artifactId>
+        <groupId>com.aliware.tianchi</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>workspace-provider</artifactId>
+
+</project>
\ No newline at end of file
-- 
GitLab