Spring Boot + Dubbo 可运行的例子源码-实现服务注册和远程调用
2017-09-14 11:01
1201 查看
最近公司的一个分布式系统想要尝试迁移到Dubbo,项目本身是Spring Boot的,经过一些努力,最终也算是搭建起一个基础的框架了,放到这里记录一下。需要依赖一个外部的zookeeper。
源码地址:点我
项目结构:
Maven构建的Spring Boot 多模块项目,provide为服务提供者,开放出接口供外部访问;consume为服务消费者,RPC调用provide提供的服务。
在resources下新建dubbo文件,并添加 dubbo-provider.xml文件:
dubbo.properties文件:
xml文件中的 ref="testService" 很重要,后面consume需要通过这个来进行RPC访问。
在resources下新建dubbo目录,添加dubbo-consume.xml文件:
这个id 就是Provide里设置的ref,不要错了;
dubbo.properties文件:
TestService:
仅需要一个接口,不需要实现,通过远程调用来调用Provide的具体实现;
TestController:具体测试入口,调用远程Provide的实现:
还需要修改一下consume的端口,防止冲突,在consume的application.properties加入:
现在将Provide和Consume都启动,然后访问 localhost:8081/test,这时会得到:
可知项目已经正确的执行了远程调用。
源码地址:点我
项目结构:
Maven构建的Spring Boot 多模块项目,provide为服务提供者,开放出接口供外部访问;consume为服务消费者,RPC调用provide提供的服务。
Provide
Dubbo配置类:@Configuration @PropertySource("classpath:dubbo/dubbo.properties") @ImportResource({ "classpath:dubbo/*.xml" }) public class DubboConfig { }
在resources下新建dubbo文件,并添加 dubbo-provider.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:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="${dubbo.application.name}"/> <dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}"/> <dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}"/> <dubbo:service interface="com.csonezp.TestService" ref="testService" retries="0" timeout="6000"/> </beans>
dubbo.properties文件:
#应用名称 dubbo.application.name=example-provider #注册中心类型 dubbo.registry.protocol=zookeeper #注册中心地址 dubbo.registry.address=127.0.0.1:2181 #暴露服务方式 dubbo.protocol.name=dubbo #暴露服务端口 dubbo.protocol.port=20880
com.csonezp.TestService:
public interface TestService { String test(); }
TestServiceImpl:
@Service("testService") public class TestServiceImpl implements TestService { @Override public String test() { return "message from provide"; } }
xml文件中的 ref="testService" 很重要,后面consume需要通过这个来进行RPC访问。
Consume
Dubbo配置类:/** * Created by csonezp on 2017/9/14. */ @Configuration @PropertySource("classpath:dubbo/dubbo.properties") @ImportResource({ "classpath:dubbo/*.xml" }) public class DubboConfig { }
在resources下新建dubbo目录,添加dubbo-consume.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:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="${dubbo.application.name}"/> <dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}"/> <dubbo:reference id="testService" interface="com.csonezp.TestService"/> </beans>
这个id 就是Provide里设置的ref,不要错了;
dubbo.properties文件:
#应用名称 dubbo.application.name=example-consume #注册中心类型 dubbo.registry.protocol=zookeeper #注册中心地址 dubbo.registry.address=127.0.0.1:2181
TestService:
/**
* Created by csonezp on 2017/9/14.
*/
public interface TestService { String test(); }
仅需要一个接口,不需要实现,通过远程调用来调用Provide的具体实现;
TestController:具体测试入口,调用远程Provide的实现:
@RestController public class TestController { @Autowired TestService testService; @RequestMapping("/test") public Object test() { return testService.test(); } }
还需要修改一下consume的端口,防止冲突,在consume的application.properties加入:
server.port=8081
现在将Provide和Consume都启动,然后访问 localhost:8081/test,这时会得到:
可知项目已经正确的执行了远程调用。
相关文章推荐
- spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法
- (二)SpringBoot+SpringCloud —— 使用Eureka实现服务注册与发现
- Dubbo学习笔记:注册到zookeeper并实现远程调用
- 【spring源码学习】spring的远程调用实现源码分析
- Spring Boot 中使用Feign作为HTTP客户端调用远程HTTP服务
- SpringCloud(一):用springboot实现简单服务调用
- 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V4 -- 远程方法调用 整合 Spring 自动注册
- springboot下dubbo2.8.4服务的提供与消费(A模块调用B模块提供的服务并对外提供新的服务)
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十八):服务注册和发现(Consul)
- Spring Boot 实践3 --基于spring cloud 实现微服务的简单调用
- Spring整合Dubbo,使用zookeeper作为注册中心,进行远程调用及负载均衡、自动失效转移(何志雄)
- SpringBoot系列十一:SpringBoot整合Restful架构(使用 RestTemplate 模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别)
- springboot+spring cloud实现简单的gateway注册服务
- dubbo+zookeeper实现服务远程调用
- Http服务与Dubbo服务相互转换的Spring Boot代理节点实现
- 使用接口的方式调用远程服务 ------ 利用动态调用服务,实现.net下类似Dubbo的玩法。
- SpringBoot进阶邮件服务(实战模拟邮箱注册含源码)
- spring boot(实现服务注册及发现)
- Spring Boot使用Feign客户端调用远程服务时出现:timed-out and no fallback available,failed and no fallback available的问题解决
- spring cloud feign实现远程调用服务传输文件的方法