ServiceComb的rpc方式
1.项目的流程见serviceComb学习笔记,此处只写核心代码
2.创建maven项目
-
父项目的pom
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>com.zjb</groupId> <artifactId>servicecomb-rpc</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>serviceinterface</module> <module>rpcprovider</module> <module>rpcconsumer</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.12.RELEASE</version> <relativePath/> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>java-chassis-dependencies</artifactId> <version>1.0.0-m2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> </project>
3.接口类
-
pom文件不需要添加内容
-
RpcService
package com.zjb.service; /** * @author zhaojianbo * @date 2019/7/15 21:32 */ public interface RpcService { String sayRpc(String name); }
-
mvn install 将项目安装到本地mvn仓库
4.服务提供者
-
pom文件
<?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>servicecomb-rpc</artifactId> <groupId>com.zjb</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>rpcprovider</artifactId> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.3.5.Final</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>spring-boot-starter-provider</artifactId> </dependency> <!--rpc通信模型--> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>transport-highway</artifactId> </dependency> <!--rpc编程模型--> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>provider-pojo</artifactId> </dependency> <!--引入服务接口--> <dependency> <groupId>com.zjb</groupId> <artifactId>serviceinterface</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
-
RpcProviderServiceImpl
package com.zjb.service.impl; import com.zjb.service.RpcService; import org.apache.servicecomb.provider.pojo.RpcSchema; /** * @author zhaojianbo * @date 2019/7/15 21:40 */ @RpcSchema(schemaId = "helloRpc") public class RpcProviderServiceImpl implements RpcService { @Override public String sayRpc(String name) { return "hello" + name; } }
-
配置文件
APPLICATION_ID: zjb.servicecomb.io service_description: name: serviceprovider-rpc version: 0.0.1 properties: allowCrossApp: true #允许跨站访问 servicecomb: handler: chain: Provider: {} highway: #rest通信 address: 0.0.0.0:9090 service: registry: address: http://127.0.0.1:30100 #服务注册中心的地址 autodiscovery: false #是否可以自动发现
-
spring boot启动类
5.服务消费者
-
pom文件
<?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>servicecomb-rpc</artifactId> <groupId>com.zjb</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>rpcconsumer</artifactId> <dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.3.5.Final</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>spring-boot-starter-provider</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--rpc通信模型--> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>transport-highway</artifactId> </dependency> <!--rpc编程模型--> <dependency> <groupId>org.apache.servicecomb</groupId> <artifactId>provider-pojo</artifactId> </dependency> <!--引入服务接口--> <dependency> <groupId>com.zjb</groupId> <artifactId>serviceinterface</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project>
-
RestConsumerServiceImpl
package com.zjb.service.impl; import com.zjb.service.RpcService; import org.apache.servicecomb.provider.pojo.RpcReference; import org.springframework.stereotype.Component; /** * @author zhaojianbo * @date 2019/7/15 22:05 */ @Component public class RestConsumerServiceImpl implements RpcService { @RpcReference(microserviceName = "zjb.servicecomb.io:serviceprovider-rpc", schemaId = "helloRpc") private RpcService rpcService; @Override public String sayRpc(String name) { return rpcService.sayRpc(name); } }
-
RpcConsumerController
package com.zjb.controller; import com.zjb.service.RpcService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; /** * @author zhaojianbo * @date 2019/7/15 22:13 */ @RestController public class RpcConsumerController { @Autowired private RpcService rpcService; @RequestMapping("/rpc") @ResponseBody public String rpcInvoke() { return rpcService.sayRpc("hello"); } }
-
配置文件
-
microservice.yaml
APPLICATION_ID: zjb.servicecomb.io service_description: name: serviceconsumer-rpc version: 0.0.1 properties: allowCrossApp: true #允许跨站访问 servicecomb: handler: chain: Provider: {} highway: #rest通信 address: 0.0.0.0:9091 service: registry: address: http://127.0.0.1:30100 #服务注册中心的地址 autodiscovery: false #是否可以自动发现
-
application.properties
server.port=8080
-