首页 > 编程知识 正文

java调用dubbo接口测试,thrift和dubbo

时间:2023-05-06 00:19:36 阅读:147169 作者:123

SpringCloud在轻松集成Dubbo实现RPC调用之前很久就在进行微服务体系结构的选择时就询问了蚂蚁微服务RPC框架Dubbo。 当时与SpringCloud通过http协议调用的体系结构进行了比较。 发现dubbo的rpc框架学习成本高、代码入侵性强、自身生态不完善,需要集成多个外部组件,因此选择了性能相对较弱的Spring Cloud家族桶。

在Spring Cloud Alibaba出现之前,使用Nacos作为服务发现和注册,同时与使用Feign的http方式和使用Dubbo的rpc方式的调用兼容。

Spring Cloud 为什么需要RPC

在用Spring Cloud构建的微服务系统中,很多开发者使用官方提供的Feign组件进行内部服务通信。 此声明式HTTP客户端非常简洁、方便、优雅,无论开发平台还是语言都在使用,但HTTP通常不打开KeepAlive功能。 也就是说,当前连接是短连接,每次都要求短连接的缺点

向外部提供REST API服务是一件非常好的事情,但是内部调用也使用HTTP调用方法会降低性能。 缺省情况下,Spring Cloud使用的Feign组件的内部服务调用是在使用的HTTP协议中调用的。 此时,如果内部服务使用RPC调用,外部使用REST API,则选择非常好。

引用来源: Dubbo与Spring Cloud完美结合使用Dubbo Spring Cloud,使用内部RPC协议几乎是零成本的改造。

另一方面,系统结构云网关作为云集群的网关,使用http协议进行外部路由传输,的内部服务呼叫为http://www.Sina.com 协议cloud-user和cloud-mq之间的远程调用使用Nacos作为dubbo协议dubbo和http://www.com .协议和服务注册与发现调用的流控制服务配置中心

云管理#服务监视云网关云- MQ # MQ服务云提供商#服务接口(9490 )

publicinterfaceuserprovider { userdtocheckuser (字符串用户名称,字符串密码); 用户界面用户名称(string username; } @ data @ builder @ noargsconstructor @ allargsconstructorpublicclassuserdtoimplementsserializable { string username; String realName; 字符串密码; }服务接口是服务提供者和消费者的合同,传输对象的DTO,包括服务的方法。 要独立创建httpDTO对象,请使用Serializable接口dubbo包dubbo

ependencygroupidcom.Alibaba.cloud/groupidartifactidspring-cloud-starter-dubbo/artifact id/从属群体引导启动器/actuator/artifact id /从属弹簧引导启动器/actuator

3 .服务接口实现importorg.Apache.dubbo.config.annotation.service; @ servicepublicclassuserproviderimplementsuserprovider { @ autowiredprivateuserserviceuserservice; @ overridepublicuserdtocheckuser (字符串用户名称,字符串密码) { User user=userS

ervice.checkUser(userName, password); return UserConvertor.toDTO(user); }}

@Service必须是org.apache.dubbo.config.annotation.Service

4. 配置Dubbo服务相关的信息 spring: main: allow-bean-definition-overriding: true dubbo: scan: base-packages: fun.barryhome.cloud.provider #指定 Dubbo 服务实现类的扫描基准包 protocols: dubbo: name: dubbo # Dubbo 的协议名称 port: -1 # port 为协议端口( -1 表示自增端口,从 20880 开始) registry: address: spring-cloud://localhost # 挂载到 Spring Cloud 注册中心

启动后有可能出现连接失败,不影响使用

java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_111] at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_111] at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_111] 三、服务调用方实现

1. 引入依赖包

<!--服务接口--><dependency> <groupId>fun.barryhome</groupId> <artifactId>cloud-provider</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>compile</scope></dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>

2. 调用服务接口

import org.apache.dubbo.config.annotation.Reference;public class UserController { @Reference private UserProvider userProvider; @GetMapping(value = "/sessionUser") public UserDTO sessionUser(HttpServletRequest request) { String userName = request.getHeader("X-User-Name"); if (Strings.isEmpty(userName)) { throw new RuntimeException("没有找到用户"); } return userProvider.findByUserName(userName); }}

3. 配置Dubbo服务相关的信息

dubbo: cloud: subscribed-services: cloud-user # 服务提供方的服务名 consumer: check: false loadbalance: "leastactive" # 最小活跃数负载均衡 registry: # 挂载到 Spring Cloud 注册中心 address: spring-cloud://localhost

dubbo.consumer.check:用于启动时是否检查服务提供方是否运行正常,如果不正常将不能启动调用方

dubbo.consumer.loadbalance:负载均衡策略

RandomLoadBalance:随机,按权重设置随机概率ConsistentHashLoadBalance:一致性哈希算法LeastActiveLoadBalance:最小活跃数负载均衡RoundRobinLoadBalance:根据权重进轮训四、总结 服务间使用了长连接,在正常运行时,提供方某个节点断掉后会需要一段时间来切换,可使用sentinel来控制快速切换可用节点使用dubbo进行远程调用,内部调用性能上有所提供,调用方式上也相对简单与sentinel配合,合理使用负载策略,可实现更多功能,如灰度发布,版本控制等性能的提升让调用链增加成为可能性,可实现更小粒度的微服务拆分与组合

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。