Dubbo——使用Zookeeper注册中心实现Dubbo

简介: Dubbo——使用Zookeeper注册中心实现Dubbo

1.写在前面


有关Zookeeper注册中心的相关内容,可以参考我的这篇博客:

https://blog.csdn.net/weixin_43823808/article/details/117339044


2.案例分析


这里使用注册中心仍然需要三个maven工程,第一个是maven java工程,后两个是maven web工程,创建步骤不再多说了。



2.1 第一个是maven java工程


这其中提供的是服务模型(实体Bean)、服务接口(对外提供的方法),这个工程不需要添加任何依赖。

package com.szh.dubbo.model;
import java.io.Serializable;
/**
 *
 */
public class User implements Serializable {
    private Integer id;
    private String username;
    //getter and setter
}
package com.szh.dubbo.service;
import com.szh.dubbo.model.User;
/**
 *
 */
public interface UserService {
    User queryUserById(Integer id,String username);
}

2.2 第二个是maven web工程

这个代表的是服务提供者,其中包含对第一个maven java工程中服务接口方法的实现。

package com.szh.dubbo.service.impl;
import com.szh.dubbo.model.User;
import com.szh.dubbo.service.UserService;
/**
 *
 */
public class UserServiceImpl implements UserService {
    @Override
    public User queryUserById(Integer id, String username) {
        User user=new User();
        user.setId(id);
        user.setUsername(username);
        return user;
    }
}

dubbo服务提供者的配置文件。之前我们使用的直连方式实现dubbo,所以地址端口号是 dubbo://localhost:20880。

现在使用了zookeeper注册中心,这个地址和端口号要做修改:zookeeper://localhost:2181。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <!-- 声明dubbo服务提供者的名称:保证唯一性 -->
    <dubbo:application name="007-zk-userservice-provider"/>
    <!-- 声明dubbo使用的协议和端口号 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!-- 使用zookeeper注册中心,指定注册中心的地址、端口号 -->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!-- 暴露接口服务 -->
    <dubbo:service interface="com.szh.dubbo.service.UserService" ref="userServiceImpl"/>
    <!-- 加载接口实现类 -->
    <bean id="userServiceImpl" class="com.szh.dubbo.service.impl.UserServiceImpl"/>
</beans>

由于在服务提供者中,需要加载之前服务接口的实现类,所以这里需要用到Spring的监听器,同时读取dubbo配置文件。


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:dubbo-zk-userservice-provider.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

pom文件中的相关依赖。

    <!-- Spring依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!-- SpringMVC依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>
    <!-- Dubbo依赖 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.6.2</version>
    </dependency>
    <!-- 接口工程依赖 -->
    <dependency>
      <groupId>com.szh.dubbo</groupId>
      <artifactId>006-zk-interface</artifactId>
      <version>1.0.0</version>
    </dependency>
    <!-- Zookeeper依赖 -->
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>4.1.0</version>
    </dependency>


2.3 第三个是maven web工程


这个代表的是服务消费者,其中包含一个控制层方法的实现,去响应之前的服务接口。

package com.szh.dubbo.controller;
import com.szh.dubbo.model.User;
import com.szh.dubbo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 *
 */
@Controller
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping(value = "/userDetail")
    public String userDetail(Integer id, String username, Model model) {
        User user=userService.queryUserById(id,username);
        model.addAttribute("user",user);
        return "userDetail";
    }
}

然后是dubbo服务消费者的配置文件、Spring配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
    <!-- 声明dubbo服务消费者名称:保证唯一性 -->
    <dubbo:application name="008-zk-consumer"/>
    <!-- 指定注册中心 -->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!-- 引用远程接口服务 -->
    <dubbo:reference id="userService" interface="com.szh.dubbo.service.UserService"/>
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!-- 声明组件扫描器 -->
    <context:component-scan base-package="com.szh.dubbo.controller"/>
    <!-- 开启springmvc注解驱动 -->
    <mvc:annotation-driven/>
    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

最后是web.xml和控制层方法对应的jsp页面。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml,classpath:dubbo-zk-consumer.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
<%@ page contentType="text/html;charset=utf-8" language="java" %>
<html>
<head>
    <title>$</title>
</head>
<body>
    <h3>用户详情</h3>
    <div>用户编号:${user.id}</div>
    <div>用户姓名:${user.username}</div>
</body>
</html>

2.4 启动测试!!!

为后两个maven web工程配置各自的tomcat服务器(配置过程在这里就不多说了。。。)。

由于之前使用的是直连方式实现dubbo,所以配置完tomcat,先启动dubbo服务提供者的tomcat,再启动dubbo服务消费者的tomcat,直接去浏览器输入url就可以访问了。

现在使用了zookeepr注册中心,所以配置完tomcat之后,我们需要到zookeeper的根目录的bin目录下,找到zkServer.cmd先启动注册中心,然后启动dubbo服务提供者的tomcat,再启动dubbo服务消费者的tomcat,再到浏览器输入url就可以访问了。

相关文章
|
负载均衡 Kubernetes 网络协议
注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
这是小卷对分布式系统架构学习的第9篇文章,继续探讨注册中心的原理及选型。文章详细介绍了Eureka、Nacos的工作机制与特点,并对比了Eureka、Nacos、Consul和Zookeeper在一致性协议、健康检查、负载均衡等方面的差异。最后根据不同的应用场景给出了注册中心的选型建议,帮助读者理解如何选择最适合的注册中心。
1581 100
|
存储 缓存 负载均衡
如何设计一个注册中心?以Zookeeper为例
本文介绍了分布式系统中注册中心的设计与工作原理,重点讲解了Zookeeper作为注册中心的实现。注册中心需具备服务注册、注销、心跳检测、服务查询等功能,确保高可用性。Zookeeper通过层次命名空间和znode存储数据,支持服务注册与发现,并采用发布-订阅模式通知消费者服务变更。然而,Zookeeper存在选举期间不可用的问题,不太适合作为注册中心,因其CP模型优先保证一致性而非可用性。
853 78
|
存储 负载均衡 监控
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
这篇文章是关于Apache Dubbo框架与Zookeeper的关系,以及如何下载、安装和启动Zookeeper的教程,包括解决启动过程中可能遇到的报错问题。
897 3
dubbo学习一:zookeeper与dubbo的关系,下载安装启动zookeeper(解决启动中报错)
|
Dubbo 应用服务中间件 Apache
Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移
如果 Dubbo 应用使用 ZooKeeper 作为注册中心,现在需要切换到新的 ZooKeeper 实例,如何做到流量无损?
372 4
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
1465 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
498 2
|
Dubbo Java 应用服务中间件
💥Spring Cloud Dubbo火爆来袭!微服务通信的终极利器,你知道它有多强大吗?🔥
【8月更文挑战第29天】随着信息技术的发展,微服务架构成为企业应用开发的主流模式,而高效的微服务通信至关重要。Spring Cloud Dubbo通过整合Dubbo与Spring Cloud的优势,提供高性能RPC通信及丰富的生态支持,包括服务注册与发现、负载均衡和容错机制等,简化了服务调用管理并支持多种通信协议,提升了系统的可伸缩性和稳定性,成为微服务通信领域的优选方案。开发者仅需关注业务逻辑,而无需过多关心底层通信细节,使得Spring Cloud Dubbo在未来微服务开发中将更加受到青睐。
393 0
|
Dubbo 应用服务中间件 Apache
Star 4w+,Apache Dubbo 3.3 全新发布,Triple X 领衔,开启微服务通信新时代
在 Apache Dubbo 突破 4w Star 之际,Apache Dubbo 团队正式宣布,Dubbo 3.3 正式发布!作为全球领先的开源微服务框架,Dubbo 一直致力于为开发者提供高性能、可扩展且灵活的分布式服务解决方案。此次发布的 Dubbo 3.3,通过 Triple X 的全新升级,突破了以往局限,实现了对南北向与东西向流量的全面支持,并提升了对云原生架构的友好性。
709 121
|
负载均衡 Dubbo 应用服务中间件
框架巨擘:Dubbo如何一统异构微服务江湖,成为开发者的超级武器!
【8月更文挑战第8天】在软件开发中,微服务架构因灵活性和可扩展性备受欢迎。面对异构微服务的挑战,Apache Dubbo作为高性能Java RPC框架脱颖而出。它具备服务注册与发现、负载均衡及容错机制等核心特性,支持多种通信协议和序列化方式,能有效连接不同技术栈的微服务。Dubbo的插件化设计保证了面向未来的扩展性,使其成为构建稳定高效分布式系统的理想选择。
481 80