5分钟搞定Dubbo应用接入华为云微服务引擎CSE
Dubbo和CSE底层都使用了Spring的依赖注入和bean管理系统,所以使用Dubbo的服务迁移到华为云微服务引擎CSE的工作量较小, 主要改动在依赖和配置方面。
本示例的完整代码已放在GitHub上,其中目录dubbo-demo是原始的Dubbo DEMO,目录dubbo-demo-servicecomb是改造后的可直接运行于华为云CSE的DEMO。
1、管理依赖:/dubbo-demo/pom.xml
在主项目pom里的dependencyManagement中增加如下配置来管理CSE包依赖,子项目就不需要指定CSE版本号。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>cse-dependency</artifactId>
<version>2.3.9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注意,maven的settings需添加cse的mirror才能正常下载到cse的相关依赖包:
<mirror>
<id>nexus-cse</id>
<mirrorOf>*</mirrorOf>
<name>cse nexus</name>
<url>http://maven.huaweicse.com/nexus/content/groups/public</url>
</mirror>
2、服务提供方:dubbo-demo-provider
2.1、替换依赖:/dubbo-demo-provider/pom.xml
将对Dubbo的依赖替换为对CSE的依赖pom.xml
Dubbo
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.7</version>
</dependency>
CSE
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>cse-solution-service-engine</artifactId>
</dependency>
2.2、通过添加标签的方式发布服务接口:DemoServiceImpl
Dubbo
public class DemoServiceImpl implements DemoService {
......
}
CSE
@RpcSchema(schemaId = "providerSchema")
public class DemoServiceImpl implements DemoService {
......
}
2.3、修改配置:/dubbo-demo-provider/src/main/resources
删除:/dubbo-demo-provider/src/main/resources/META-INF/spring/dubbo-demo-provider.xml
新增:/dubbo-demo-provider/src/main/resources/META-INF/spring/demo.bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util" xmlns:cse="http://www.huawei.com/schema/paas/cse/pojo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.alibaba.dubbo.demo" />
</beans>
新增:/dubbo-demo-provider/src/main/resources/microservice.yaml
APPLICATION_ID: dubbo_servicecomb
service_description:
name: provider
version: 0.0.1
cse:
service:
registry:
address: https://cse.cn-north-1.myhuaweicloud.com:443
rest:
address: 0.0.0.0:8082
credentials:
accessKey: 替换为华为云IAM账号AK(如何获取AK/SK)
secretKey: 替换为华为云IAM账号SK
akskCustomCipher: default
project: cn-north-1
2.4、修改提供方启动入口
Dubbo
public class Provider {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-provider.xml"});
context.start();
System.in.read(); // 按任意键退出
}
}
CSE
public class Provider {
public static void main(String[] args) throws Exception {
Log4jUtils.init();
BeanUtils.init();
}
}
3、服务消费方:dubbo-demo-consumer
3.1、替换依赖:/dubbo-demo-consumer/pom.xml
将对Dubbo的依赖替换为对CSE的依赖
Dubbo
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.7</version>
</dependency>
CSE
<dependency>
<groupId>com.huawei.paas.cse</groupId>
<artifactId>cse-solution-service-engine</artifactId>
</dependency>
3.2、修改消费方启动入口
Dubbo
public class Consumer {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dubbo-demo-consumer.xml"});
context.start();
DemoService demoService = (DemoService) context.getBean("demoService");
String hello = demoService.sayHello("world");
System.out.println(hello);
}
}
CSE
import org.springframework.stereotype.Component;
@Component
public class Consumer {
@RpcReference(microserviceName="provider", schemaId="providerSchema")
private static DemoService demoService;
public static void main(String[] args) throws Exception {
Log4jUtils.init();
BeanUtils.init();
String hello = demoService.sayHello("world");
System.out.println(hello);
}
}
3.3、修改配置:/dubbo-demo-comsumer/src/main/resources
删除:/dubbo-demo-consumer/src/main/resources/META-INF/spring/dubbo-demo-consumer.xml
新增:/dubbo-demo-consumer/src/main/resources/META-INF/spring/demo.bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util" xmlns:cse="http://www.huawei.com/schema/paas/cse/pojo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="com.alibaba.dubbo.demo" />
</beans>
新增:/dubbo-demo-consumer/src/main/resources/microservice.yaml
APPLICATION_ID: dubbo_servicecomb
service_description:
name: consumer
version: 0.0.1
cse:
service:
registry:
address: https://cse.cn-north-1.myhuaweicloud.com:443
rest:
address: 0.0.0.0:8084
credentials:
accessKey: 替换为华为云IAM账号AK(如何获取AK/SK)
secretKey: 替换为华为云IAM账号SK
akskCustomCipher: default
project: cn-north-1
4、验证:先启动Provider,再启动Consumer
4.1、进入华为云微服务引擎CSE控制台:微服务管理>服务治理>dubbo_servicecomb,看到如下服务调用关系:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1TP3Fmd5IjY2hnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TN0gTOyEDMyIDNxUDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)