dubbo+zookeeper和sprincloud

image.png

服务注册与发现
Dubbo + Zookeeper:
Zookeeper 作为注册中心,存储服务提供者的地址、端口、服务版本等元数据
Dubbo 客户端直连服务端,通过长连接减少连接开销
支持服务分组、版本控制、负载均衡(随机、轮询、一致性哈希等)
Spring Cloud:
主流使用 Nacos/Eureka/Consul 作为注册中心
基于 HTTP 短连接,通过服务名调用(客户端负载均衡 Ribbon/LoadBalancer)
天然支持服务健康检查、自动扩缩容

性能对比
Dubbo:
二进制协议(Dubbo 协议)序列化效率高,网络传输体积小
长连接复用,减少 TCP 握手开销
单机可支撑数万 QPS,适合高并发、低延迟场景
Spring Cloud:
HTTP 协议文本传输,序列化和网络开销大
短连接每次调用都要建立 TCP 连接
性能相对较低,但足够支撑大部分业务场景

适用场景
Dubbo + Zookeeper:
性能要求高的内部系统(如交易、支付)
服务节点数不多,微服务需求相对简单的场景
已有 Zookeeper 集群,希望快速接入微服务的项目
Spring Cloud:
互联网分布式系统,需要完整微服务能力
跨语言调用(HTTP/REST 天然支持)
服务规模大,需要完善的监控、熔断、链路追踪的场景

dubbo使用

// 1. 定义服务接口
public interface UserService {
    User getUserById(Long id);
}

// 2. 实现接口
@DubboService(version = "1.0.0") // Dubbo注解暴露服务
public class UserServiceImpl implements UserService {
    @Override
    public User getUserById(Long id) {
        return new User(id, "张三");
    }
}

// 3. 配置文件(application.yml)
dubbo:
  application:
    name: user-service
  registry:
    address: zookeeper://127.0.0.1:2181 # 注册中心地址
  protocol:
    name: dubbo
    port: 20880 # Dubbo协议端口
//消费者
@RestController
public class OrderController {
    // 注入远程服务
    @DubboReference(version = "1.0.0")
    private UserService userService;

    @GetMapping("/order/{userId}")
    public String getOrder(@PathVariable Long userId) {
        // 直接调用远程服务(像调用本地方法)
        User user = userService.getUserById(userId);
        return "订单所属用户:" + user.getName();
    }
}

springcloud

// 1. 提供REST接口
@RestController
@RequestMapping("/user")
public class UserController {
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return new User(id, "张三");
    }
}

// 2. 配置文件(application.yml)
spring:
  application:
    name: user-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 # 注册中心地址
server:
  port: 8081
// 1. 定义Feign客户端(声明式HTTP客户端)
@FeignClient(name = "user-service") // 对应服务名
public interface UserFeignClient {
    @GetMapping("/user/{id}")
    User getUserById(@PathVariable("id") Long id);
}


// 2. 调用服务
@RestController
public class OrderController {
    @Autowired
    private UserFeignClient userFeignClient;

    @GetMapping("/order/{userId}")
    public String getOrder(@PathVariable Long userId) {
        // 通过Feign调用HTTP接口
        User user = userFeignClient.getUserById(userId);
        return "订单所属用户:" + user.getName();
    }
}

// 3. 配置文件
spring:
  application:
    name: order-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 8082
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • """1.个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消息应非常简单,如“Hello ...
    她即我命阅读 4,396评论 0 6
  • 1、expected an indented block 冒号后面是要写上一定的内容的(新手容易遗忘这一点); 缩...
    庵下桃花仙阅读 937评论 1 2
  • 一、工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具 【M】移动工具 【V...
    墨雅丫阅读 1,313评论 0 0
  • 跟随樊老师和伙伴们一起学习心理知识提升自已,已经有三个月有余了,这一段时间因为天气的原因休课,顺便整理一下之前学习...
    学习思考行动阅读 832评论 0 2
  • 一脸愤怒的她躺在了床上,好几次甩开了他抱过来的双手,到最后还坚决的翻了个身,只留给他一个冷漠的背影。 多次尝试抱她...
    海边的蓝兔子阅读 822评论 1 4

友情链接更多精彩内容