通常情况,dubbo应用有两种使用场景,其一为服务提供方,另外一个是服务消费方。
这里选择更优的方式,在dubbo的服务层之上提供一个API网关,由API网关负责对dubbo服务的访问(可以考虑用泛化的方式去调用),这样所有的业务系统只要以Restful的方式调用API网关即可调用dubbo服务。
在dubbo-api中定义服务提供方为服务消费方暴露接口:
public interface TestService { String test(String text); }添加依赖:
<dependencies> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>com.coderqian</groupId> <artifactId>dubbo-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>在application.properties添加dubbo的相关配置信息:
# 当前dubbo应用id dubbo.application.id=dubbo-provider # 当前dubbo应用名称 dubbo.application.name=dubbo-provider # 注册中心 dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.server=true # 生产者暴露给消费者协议 dubbo.protocol.name=dubbo # 生产者暴露给消费者端口 dubbo.protocol.port=20880注:这个配置只针对服务提供方,消费方不用指定协议,它自己会根据服务端的地址信息和@Reference注解去解析协议。
在Spring Boot Application的上添加@EnableDubbo,表示要开启dubbo功能。(dubbo provider服务可以使用或者不使用web容器)
@EnableDubbo @SpringBootApplication public class DubboProviderApplication { public static void main(String[] args) { SpringApplication.run(DubboProviderApplication.class, args); } }实现TestService,对外提供服务。
@Service public class TestServiceImpl implements TestService { @Override public String test(String text) { return text; } }注:@Service是dubbo提供的注解com.alibaba.dubbo.config.annotation.Service。
添加依赖:
<dependencies> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>com.coderqian</groupId> <artifactId>dubbo-api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>在application.properties添加dubbo的相关配置信息:
# 当前dubbo应用id dubbo.application.id=dubbo-customer # 当前dubbo应用名称 dubbo.application.name=dubbo-customer # 注册中心 dubbo.registry.address=zookeeper://127.0.0.1:2181 # 生产者提供的协议id dubbo.protocol.id=dubbo-provider # 生产者提供的协议名称 dubbo.protocol.name=dubbo # 生产者提供的协议端口号 dubbo.protocol.port=20880通过@Reference注入需要使用的服务。
@RestController @RequestMapping("/customer") public class TestController { @Reference private TestService testService; @RequestMapping(value = "/hello", method = RequestMethod.GET) public String test(String text) { return testService.test(text); } }- dubbo: http://dubbo.io
- spring-boot: http://projects.spring.io/spring-boot
- dubbo-spring-boot-starter: https://github.com/alibaba/dubbo-spring-boot-starter
- dubbo-spring-boot-project: https://github.com/dubbo/dubbo-spring-boot-project
MIT © CoderQian