目录
一、创建模块化项目
二、公共api接口模块
三、服务提供者
四、服务调用者
五、测试
六、案例代码
在微服务架构中,微服务之间的调用一般我们有两种比较好的解决策略,分别是通过OpenFeign的基于http协议的传输的调用和基于RCP协议的Dubbo框架来实现高效传输。对比两个策略可以清晰看到:OpenFeign更适合于向外部系统提供的服务,因为http协议的restful风格请求兼容性很好,缺点是会比RPC协议的Dubbo传输效率稍低一些,下面来看一下,在微服务架构中我们如何使用Dubbo进行远程调用吧!
一、创建模块化项目
项目结构如下:
服务调用者和服务提供者共用api接口进行RCP调用,
服务提供者的依赖:
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--nacos服务发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- Dubbo Spring Cloud Starter --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><!--引入api包--><dependency><groupId>com.dragonwu</groupId><artifactId>dubbo-api</artifactId><version>1.0.0</version></dependency></dependencies>
二、公共api接口模块
接口类会被服务提供者和服务调用者用到
public interface SayHelloService {MsgDto sendMsg(String msg);
}
传输数据对象
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MsgDto implements Serializable {String msg;Date date;
}
三、服务提供者
配置类:
server:port: 8001
spring:application:name: dubbo-producer-servicecloud:nacos:password: username: server-addr: nacos-server
dubbo:protocol:# 协议名称name: dubbo# dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80;# 如果没有配置port,则自动采用默认端口,如果配置为-1,则会分配一个没有被占用的端口# Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增加,确保端口可控port: -1registry:# 前缀spring-cloud说明:挂载到spring-cloud 注册中心address: spring-cloud://nacos-server:8848
@DubboCompoentScan //扫描指定包下的服务类
@SpringBootApplication
@DubboComponentScan(value = {"com.dragonwu.service.impl"}) //扫描指定包下的服务类
public class ProducerApplication {public static void main(String[] args) {SpringApplication.run(ProducerApplication.class, args);}
}
@DubboService:标注此类为dubbo服务
@DubboService
public class SayHelloServiceImpl implements SayHelloService {@Overridepublic MsgDto sendMsg(String msg) {return new MsgDto("通过dubbo调用后:"+msg,new Date());}
}
四、服务调用者
server:port: 8002
spring:application:name: dubbo-consumer-servicecloud:nacos:password: WXL1214??username: Nacosserver-addr: nacos-server
dubbo:protocol:# 协议名称name: dubboport: -1registry:address: spring-cloud://nacos-server:8848cloud:# 要订阅的服务subscribed-services:- dubbo-producer-service
启动类
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}
}
@DubboReference:指定要消费的服务接口
@RestController
public class ConsumerController {@DubboReferenceprivate SayHelloService sayHelloService;@GetMapping("/sayHello/{msg}")public String sayHello(@PathVariable("msg") String msg){return sayHelloService.sendMsg(msg).toString();}
}
这里直接就可以调用服务提供者的对应服务了,是不是很便捷!
五、测试
启动两个服务后注册到了Nacos中:
apiPost进行测试:
通过服务调用者调用服务消费者的服务成功,效率也杠杠的!
六、案例代码
SpringCloudAlibaba各技术栈实现的案例代码集 我的笔记: SpringCloudAlibaba各技术栈实现的案例代码集 我的笔记 - Gitee.com