首页 > 其他分享 >【WEEK16】 【DAY2】Dubbo和Zookeeper集成第二部分【中文版】

【WEEK16】 【DAY2】Dubbo和Zookeeper集成第二部分【中文版】

时间:2024-06-12 23:00:56浏览次数:16  
标签:Dubbo dubbo spring Zookeeper boot server WEEK16 org 18.4

2024.6.11 Tuesday
接上文【WEEK15】 【DAY4】Dubbo和Zookeeper集成第一部分【中文版】

目录

18.Dubbo和Zookeeper集成

18.3.测试环境搭建

18.3.4.Windows下安装dubbo-admin

dubbo本身并不是一个服务软件。它其实就是一个jar包,能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,不过这个监控即使不装也不影响使用。

18.3.4.1.下载dubbo-admin

https://github.com/apache/dubbo-admin/tree/develop在这里插入图片描述

现在官网只剩下develop版本,master版本从这个链接下载:https://github.com/wikerx/dubbo-admin-master
使用master版本进行后续操作。

18.3.4.2.解压进入目录

修改 dubbo-admin\src\main\resources \application.properties 指定zookeeper地址(刚才没有修改则不需要修改)

server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=guest
#以下是注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
18.3.4.3.在项目目录下打包dubbo-admin

在这里插入图片描述

mvn clean package -Dmaven.test.skip=true
在这里插入图片描述

18.3.4.4.执行 dubbo-admin\target 下的dubbo-admin-0.0.1-SNAPSHOT.jar

在这里插入图片描述

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
在这里插入图片描述

此时zookeeper的服务一定要处于打开状态,否则无法查询到。
执行完毕,访问http://localhost:7001/,输入默认账号和密码(都是root)
在这里插入图片描述
点击“登录”后:
在这里插入图片描述

可以看一下系统日志:
在这里插入图片描述

18.4.SpringBoot + Dubbo + zookeeper

18.4.1.框架搭建

18.4.1.1.创建空项目Dubbo_zookeeper

在这里插入图片描述

18.4.1.2.新建provider-server模块

在这里插入图片描述
添加web支持
在这里插入图片描述
删除多余文件
在这里插入图片描述

18.4.1.2.1.新建service文件夹,新建TicketService.java和TicketServiceImpl.java
在这里插入图片描述

18.4.1.2.2.TicketService.java

package com.P60.service;

public interface TicketService {
    public String getTicket();
}

18.4.1.2.3.TicketServiceImpl.java

package com.P60.service;

public class TicketServiceImpl implements TicketService {
    @Override   //alt+insert重写方法
    public String getTicket() {
        return "Dubbo+Zookeeper";
    }
}
18.4.1.3.新建consumer-server模块

在这里插入图片描述
添加web支持
在这里插入图片描述
删除多余文件
在这里插入图片描述

18.4.1.3.1.新建service文件夹,新建UserService.java
在这里插入图片描述

package com.P60.service;

public interface UserService {
    //需要到注册中心取出provider-server中的票
}

18.4.2.修改provider-server(服务提供者)

18.4.2.1.导入依赖

将服务提供者注册到注册中心,我们需要整合Dubbo和zookeeper,所以需要导包。
18.4.2.1.1.Dubbo Spring Boot Starter

https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter/2.7.3
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
</dependency>

18.4.2.1.2.ZooKeeper Client

https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>
18.4.2.2.修改pom.xml

按照惯例修改settings中的maven,jdk和Java版本,Project Structure中的jdk和Java版本。修改pom中的springframework版本到2.7.13,重新加载Maven。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>provider-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>provider-server</name>
    <description>provider-server</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <!--Dubbo+zookeeper-->
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>

        <!--zookeeper客户端-->
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

        <!--zookeeper服务端及其框架包-->
        <!-- 引入zookeeper -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除这个slf4j-log4j12:为了解决日志冲突,需要剔除日志依赖-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
18.4.2.3.修改application.properties
# 可参考D:\dubbo-admin-master-master\dubbo-admin\src\main\resources\application.properties中的配置文件
spring.application.name=provider-server
server.port=8001
# 当前应用名
dubbo.application.name=provider-server
# 注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 扫描指定包下的服务(需要注册)
dubbo.scan.base-packages=com.P60.service
18.4.2.4.修改TicketServiceImpl.java
package com.P60.service;

import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

//使用了Dubbo后尽量不用Service注解:因为Spring和Dubbo有同名注解@Service
@Service    //使项目被扫描,自动注册到注册中心
@Component  //存放在容器中
public class TicketServiceImpl implements TicketService {
    @Override   //alt+insert重写方法
    public String getTicket() {
        return "Dubbo+Zookeeper";
    }
}
18.4.2.5.运行ProviderServerApplication

记得先运行zkServer.cmd,可以通过dubbo-admin-0.0.1-SNAPSHOT.jar访问。
访问http://localhost:7001/
选择“服务治理”->“提供者”
在这里插入图片描述
可见“提供者”:
在这里插入图片描述

点击172.18.20.16:20880查看提供者
在这里插入图片描述

18.4.3.服务消费者

18.4.3.1.修改pom.xml(和provider类似)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>consumer-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>consumer-server</name>
    <description>consumer-server</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <!--Dubbo+zookeeper-->
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>

        <!--zookeeper客户端-->
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

        <!--zookeeper服务端及其框架包-->
        <!-- 引入zookeeper -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除这个slf4j-log4j12:为了解决日志冲突,需要剔除日志依赖-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
18.4.3.2.修改application.properties
spring.application.name=consumer-server
server.port=8002

# 消费者获取服务需要暴露自己的名字
dubbo.application.name=consumer-server
# 注册中心的地址,可以在任何电脑上
dubbo.registry.address=zookeeper://127.0.0.1:2181
18.4.3.3.修改UserService.java
package com.P60.service;

import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service    //只是调用接口,注入到容器中
public class UserService {  //不能写成Interface接口类,因为接口是抽象的,不能再调用抽象类
    //需要到注册中心取出provider-server中的票->远程引用指定的服务,按照全类名进行匹配,看谁给注册中心注册了这个全类名
    @Reference  //引用:两种方式可解决(1.使用pom坐标;2.定义路径相同的接口名)
    //此处采取第二种方式:直接将provider-server中的TicketService复制一份到consumer-server中
    TicketService ticketService;

    public  void buyTicket(){
        String ticket = ticketService.getTicket();
        System.out.println("从注册中心获取"+ticket);
    }

}
18.4.3.4.修改并运行ConsumerServerApplicationTests.java
package com.P60;

import com.P60.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired  //注入本地应用使用Autowired而非Reference
    UserService userService;
    @Test
    void contextLoads() {
        userService.buyTicket();
    }

}

在这里插入图片描述
在这里插入图片描述
这就是SpingBoot + dubbo + zookeeper实现分布式开发的应用,其实就是一个服务拆分的思想。

标签:Dubbo,dubbo,spring,Zookeeper,boot,server,WEEK16,org,18.4
From: https://blog.csdn.net/2401_83329143/article/details/139319079

相关文章

  • dubbo~全局异常拦截器的使用与设计缺陷~续
    上一次的介绍,主要围绕如何统一去捕获异常,以及为每一种异常添加自己的Mapper实现,并且我们知道,当在ExceptionMapper中返回非200的Response,不支持application/json的响应类型,而是写死的text/plain类型。Filter为二方包异常手动捕获参考:https://blog.csdn.net/2401_84048290/article......
  • Dubbo消费消息的唯一性
    在Dubbo中,如果要保证消息的唯一性,通常是指需要确保消费者接收到的消息是没有被其他消费者重复消费的。这通常涉及到分布式环境下的消息传递和处理,可以通过以下几种方式实现:使用消息队列提供的唯一性保证机制:对于Kafka,可以使用消息的唯一ID(例如:消息的offset)。对于RabbitMQ,可......
  • SpringBoot 使用 Zookeeper 实现分布式锁
    之前的博客介绍过zookeeper的分布式锁,只不过是基于Spring的实现(技术太老了),现在肯定使用SpringBoot进行实现,因此有必要再写一篇博客。有关zookeeper的部署,以及分布式锁细节,这里不再赘述,可以访问我之前编写的博客。zookeeper的单机和集群部署:https://www.cnblogs.com/stu......
  • 记一次锁使用不当导致Dubbo线程阻塞问题
    背景线上环境一个后台项目,提供基于dubbo实现的事件分发服务,最近突然出现心跳超时。问题分析检查内存是否溢出jstat-gcutil81661000意料之中,内存正常,因为内部有接入内存溢出告警,如果是内存溢出应该有收到通知,但是这次没有溢出通知。查看线程栈jstack-l8166发现有大......
  • Dubbo 3.x源码(21)—Dubbo服务引用源码(4)
    基于Dubbo3.1,详细介绍了Dubbo服务的发布与引用的源码。此前我们学习了createInvokerForRemote方法中的Wrapper有哪些以及作用,接下来我们将会的学习真正的本地、应用级别、接口级别的Protocol的引入逻辑,以及创建Proxy服务接口代理对象的逻辑。Dubbo3.x服务引用源码:Dub......
  • Dubbo面试题甄选及参考答案
    目录Dubbo是什么?Dubbo的主要使用场景有哪些?Dubbo的核心功能有哪些?Dubbo与Spring框架的集成方式是什么?Dubbo的RPC调用原理是什么?Dubbo的架构中包含哪些核心组件?Provider、Consumer、Registry、Monitor在Dubbo中分别承担什么角色?Container在Dubbo中的作用是什么?Dubbo的C......
  • dubbo~全局异常拦截器的使用与设计缺陷
    异常拦截器ExceptionMapper在JAX-RS(JavaAPIforRESTfulWebServices)中,ExceptionMapper接口用于将Java异常映射到HTTP响应。通过实现ExceptionMapper接口,你可以自定义如何处理特定类型的异常,并生成相应的HTTP响应。优先级和选择当有多个ExceptionMapper可用于处理同一类型的......
  • Dubbo源码解读-Dubbo心跳机制
    上篇我们介绍了消费端DubboInvoker的调用流程解析Dubbo源码解读-消费端DubboInvoker的调用流程解析_dubbo3使用invoker直接调用-CSDN博客        本文主要针Dubbo消费端/服务端心跳机制,从dubbo源码角度进行解析。    大家可以好好仔细读一下本文。有疑问......
  • zookeeper:Unexpected exception, exiting abnormally ::java.io.EOFException
    转载请注明出处:服务器中断,重启服务器在重启kafka服务时,遇到如下报错:2024-06-0513:52:56,251[myid:]-ERROR[main:ZooKeeperServerMain@64]-Unexpectedexception,exitingabnormallyjava.io.EOFExceptionatjava.io.DataInputStream.readInt(DataInputStream.j......
  • 使用 docker-compose 部署 zookeeper(单机和集群)
    我之前编写了一些zookeeper的博客,当时是在windows系统上部署的单机版,在实际应用中绝大多数情况下都是部署在Linux系统上,因此很有必要介绍一下如何在CentOS7上快速部署zookeeper的单机版和集群版。这里就不详细介绍zookeeper了,网上资料很多,也可以查看官网或者我之前的......