鑫三科技网站设计,建设银行网站不能登录,平顶山网站建设公司,个体工商户做网站能加地名吗本文介绍利用apache dubbo调用远程服务的开发过程#xff0c;其中利用zookeeper作为注册中心。关于zookeeper的环境搭建#xff0c;可以参考我的另一篇博文#xff1a;14-zookeeper环境搭建。
0、环境
jdk#xff1a;1.8zookeeper#xff1a;3.8.4dubbo#xff1a;2.7.…本文介绍利用apache dubbo调用远程服务的开发过程其中利用zookeeper作为注册中心。关于zookeeper的环境搭建可以参考我的另一篇博文14-zookeeper环境搭建。
0、环境
jdk1.8zookeeper3.8.4dubbo2.7.5springboot: 2.7.18
1、项目介绍
本项目包含两个服务user-service和order-service。user-service作为服务的providerorder-service是consumer。下面咱们一步步开始。下图是两个项目的结构大家先从整体上认识一下。
2、开工
按照上图的项目规划先创建user-service项目创建完成后引入springboot parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.7.18/version/parent2.1 user-service-api
这个模块就是个普通的java模块主要用来定义user-service对外暴露的接口当然实际中的异常定义、pojo也要放在这个模块。这也是dubbo官方最佳实践的建议。这个模块不需要依赖于开发框架我们只写一个接口
public interface IUserService {String getUserName(String id);
}
接口写完后将该模块install到maven库便于order-service使用。如何install利用ide或命令行都行install完成后在你的本地仓库能看到对应的jar就说明成功了。
2.2 user-service-provider
见名知意这个服务是服务的提供者首先要实现IUserService接口其次通过dubbo将服务发布出来供其他服务调用。重点来了咱们一步步来。
2.2.1 引入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-spring-boot-starter/artifactIdversion2.7.5/version/dependency!--zookeeper--dependencygroupIdorg.apache.curator/groupIdartifactIdcurator-framework/artifactIdversion5.1.0/version/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-recipes/artifactIdversion5.1.0/version/dependency!--上面install的--dependencygroupIdcom.jackie/groupIdartifactIduser-service-api/artifactIdversion1.0-SNAPSHOT/version/dependency2.2.2、实现接口
Service
public class UserServiceImpl implements IUserService {Overridepublic String getUserName(String id) {return 李明明 System.currentTimeMillis();}
}
注意Service是dubbo的包不要引入spring的。dubbo3开始改成了DubboService用来区别spring的注解。
2.2.3、启动类
SpringBootApplication
DubboComponentScan //这个注解一定要有
public class UserServiceProviderApplication {public static void main(String[] args) {SpringApplication.run(UserServiceProviderApplication.class, args);}}
2.2.4、配置文件
server:port: 8082spring:application:admin: user-service-providerdubbo:application:name: user-service-providerqos-enable: false //如果为true需要配置相应的未被占用的端口protocol:port: 20880name: dubboregistry:address: zookeeper://localhost:2181
咱们使用zookeeper作为注册中心需要配置正确的zookeeper地址我这里是本地启的服务。到此为止provider服务就开发完成了。下面开发consumer服务
2.3、order-service
consumer端先对服务端就简单的多先来引入依赖因为要用springboot和zookeeper这些以来少不了看代码 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.jackie/groupIdartifactIduser-service-api/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-spring-boot-starter/artifactIdversion2.7.5/version/dependency!--zookeeper--dependencygroupIdorg.apache.curator/groupIdartifactIdcurator-framework/artifactIdversion5.1.0/version/dependencydependencygroupIdorg.apache.curator/groupIdartifactIdcurator-recipes/artifactIdversion5.1.0/version/dependency2.3.1、调用远程服务
Component
public class UserService {public String getUserName(String id) {return userService.getUserName(id);}Referenceprivate IUserService userService;
}说明
Referencedubbo的注解用于说明远程服务的引用这里可以从zookeeper获取服务地址。Componentspring的注解。
2.3.2、启动类和Controller
SpringBootApplication
RestController
public class OrderServiceApplication {public static void main(String[] args) {SpringApplication.run(OrderServiceApplication.class, args);}GetMapping(/order/username)public String findUserName(RequestParam(id) String id) {return userService.getUserName(id);}Autowiredprivate UserService userService;}2.2.3 order-service服务的配置文件
server:port: 8081dubbo:application:name: order-serviceprotocol:name: dubboregistry:address: zookeeper://localhost:21813、测试
分别启动order-service、user-service、zookeeper。打开浏览器访问http://localhost:8081/order/username?id1效果如下图