1. 首页
  2. 程序人生

Springboot+Dubbo+Nacos 注解方式实现微服务调用

程序员

一.项目结构

|-- spring-boot-dubbo-demo (父级工程)|--spring-boot-dubbo-base(基础工程)|--spring-boot-dubbo-consumer(消费者)|--spring-boot-dubbo-provider(生产者)

SpringBoot版本:2.2.0

Dubbo版本:2.7.0

Nacos版本:1.1.4

二.启动Nacos注册中心

Nacos官方文档:

https://nacos.io/zh-cn/docs/quick-start.html

默认账号密码是nacos

Springboot+Dubbo+Nacos 注解方式实现微服务调用
Springboot+Dubbo+Nacos 注解方式实现微服务调用

三.搭建项目

Consumer和Provider的Maven依赖如下:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--Base依赖--><dependency><groupId>com.sans</groupId><artifactId>spring-boot-dubbo-base</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!--Dubbo依赖--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.0</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>2.7.0</version></dependency><!--Nacos依赖--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><version>2.7.1</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>1.0.0</version></dependency></dependencies>

Consumer配置如下:

#配置端口server:port:8862dubbo:#配置服务信息application:name:dubbo-consumer#禁用QOS同一台机器可能会有端口冲突现象qos-enable:falseqos-accept-foreign-ip:false#配置注册中心registry:address:nacos://127.0.0.1:8848#设置超时时间consumer:timeout:4000spring:main:#解决Bean重复定义问题allow-bean-definition-overriding:true

Provider配置如下:

#配置端口server:port:8861dubbo:#配置服务信息application:name:dubbo-provider#禁用QOS同一台机器可能会有端口冲突现象qos-enable:falseqos-accept-foreign-ip:false#配置注册中心registry:address:nacos://127.0.0.1:8848#设置协议-协议由提供方指定消费方被动接受protocol:name:dubboport:20880spring:main:#解决Bean重复定义问题allow-bean-definition-overriding:true

四.Base工程编写

编写DTO

/***RPC接口DTO*注意这里要实现序列化接口*@AuthorSans*@CreateTime2019/11/623:04*/@DatapublicclassProviderTestDTOimplementsSerializable{//IDprivateintid;//名字privateStringname;//序号privateIntegernumber;}

编写Serivce

/***RPC接口*@AuthorSans*@CreateTime2019/11/623:03*/publicinterfaceIProviderService{List<ProviderTestDTO>queryList();}

编写返回结果类

/***返回结果类*这里采用构建者模式构建*优点:1.私有化构造器访问范围小 2.参数可灵活设置便于管理*@AuthorSans*@CreateTime2019/11/718:59*/@GetterpublicclassResultVO<T>implementsSerializable{/***返回码*/privateintcode;/***返回信息*/privateStringmessage;/***返回数据*/privateTdata;/**私有化构造器**/privateResultVO(){}privateResultVO(ResultVO<T>resultVO){this.code=resultVO.code;this.message=resultVO.message;this.data=resultVO.data;}/***Build*/publicstaticclassBuilder<T>{privateResultVO<T>resultVO;publicBuilder(){resultVO=newResultVO<>();}publicBuildercode(intcode){resultVO.code=code;returnthis;}publicBuildermessage(Stringmessage){resultVO.message=message;returnthis;}publicBuilderdata(Tdata){resultVO.data=data;returnthis;}publicResultVO<T>build(){returnnewResultVO<>(resultVO);}}}

五.Provider工程编写

在启动类上面不要忘记加上@EnableDubbo注解

@EnableDubbo//开启Dubbo的注解支持@SpringBootApplicationpublicclassProviderApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ProviderApplication.class,args);}}

实现IProviderService接口,注意这里的Serivce引用的是dubbo的包

/***生产者Dubbo接口实现*@AuthorSans*@CreateTime2019/11/623:01*/@ServicepublicclassProviderServiceImplimplementsIProviderService{@OverridepublicList<ProviderTestDTO>queryList(){//初始化数据ProviderTestDTOtestDTO1=newProviderTestDTO();testDTO1.setId(1);testDTO1.setName("学生");testDTO1.setNumber(100);ProviderTestDTOtestDTO2=newProviderTestDTO();testDTO2.setId(2);testDTO2.setName("教师");testDTO2.setNumber(101);//组装数据List<ProviderTestDTO>list=newArrayList<>();list.add(testDTO1);list.add(testDTO2);returnlist;}}

六.Consumer工程编写

和Provider工程的启动类一样,加上@EnableDubbo注解

@EnableDubbo//开启dubbo的注解支持@SpringBootApplicationpublicclassConsumerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ConsumerApplication.class,args);}}

编写测试接口

/***消费测试接口*@AuthorSans*@CreateTime2019/11/623:09*/@RestController@RequestMapping("/consumer")publicclassConsumerController{//Dubbo远程调用注解@ReferenceprivateIProviderServiceproviderService;@RequestMapping(value="/list",method=RequestMethod.GET)publicResultVOgetList(){//远程调用List<ProviderTestDTO>providerTestDTOList=providerService.queryList();returnnewResultVO.Builder<>().code(200).message("success").data(providerTestDTOList).build();}}

七.测试

启动Provider工程和Consumer工程,这个时候Nacos会有对应的服务

Springboot+Dubbo+Nacos 注解方式实现微服务调用

使用Postman访问Consumer测试接口

Springboot+Dubbo+Nacos 注解方式实现微服务调用

八.项目源码

码云:

https://gitee.com/liselotte/spring-boot-dubbo-demo

GitHub:

https://github.com/xuyulong2017/my-java-demo

本文来自投稿,不代表程序员编程网立场,如若转载,请注明出处:http://www.cxybcw.com/28775.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code