首页 > 科技 > Springboot+Dubbo+Nacos 注解方式实现微服务调用

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

三.搭建项目

Consumer和Provider的Maven依赖如下:

org.springframework.bootspring-boot-starter-webcom.sansspring-boot-dubbo-base0.0.1-SNAPSHOTorg.apache.dubbodubbo-spring-boot-starter2.7.0org.apache.dubbodubbo2.7.0org.apache.dubbodubbo-registry-nacos2.7.1com.alibaba.nacosnacos-client1.0.0

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{ListqueryList();}

编写返回结果类

/***返回结果类*这里采用构建者模式构建*优点:1.私有化构造器访问范围小 2.参数可灵活设置便于管理*@AuthorSans*@CreateTime2019/11/718:59*/@GetterpublicclassResultVOimplementsSerializable{/***返回码*/privateintcode;/***返回信息*/privateStringmessage;/***返回数据*/privateTdata;/**私有化构造器**/privateResultVO(){}privateResultVO(ResultVOresultVO){this.code=resultVO.code;this.message=resultVO.message;this.data=resultVO.data;}/***Build*/publicstaticclassBuilder{privateResultVOresultVO;publicBuilder(){resultVO=newResultVO<>();}publicBuildercode(intcode){resultVO.code=code;returnthis;}publicBuildermessage(Stringmessage){resultVO.message=message;returnthis;}publicBuilderdata(Tdata){resultVO.data=data;returnthis;}publicResultVObuild(){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{@OverridepublicListqueryList(){//初始化数据ProviderTestDTOtestDTO1=newProviderTestDTO();testDTO1.setId(1);testDTO1.setName("学生");testDTO1.setNumber(100);ProviderTestDTOtestDTO2=newProviderTestDTO();testDTO2.setId(2);testDTO2.setName("教师");testDTO2.setNumber(101);//组装数据Listlist=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(){//远程调用ListproviderTestDTOList=providerService.queryList();returnnewResultVO.Builder<>().code(200).message("success").data(providerTestDTOList).build();}}

七.测试

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

使用Postman访问Consumer测试接口

八.项目源码

码云:

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

GitHub:

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

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/283825.html