搭载Dubbo+Zookeeper踩了这么多坑,我终于决定写下这篇!

微服务架构(待深入)


image.png

Dubbo的架构

========

image.png

节点角色说明:

Provider暴露服务的服务提供方

Container:服务运行容器

Consumer:调用远程服务的服务消费方

Registry:服务注册与发现的注册中心

Monitor:统计服务的调用次数和调用时间的监控中心

快速入门

====

image.png

Zookeeper下载

===========

官网:Apache ZooKeeper

我选择的是这个版本,带有bin目录的

image.png

Windows


  1. 直接解压出来

  2. 将conf目录下的zoo_sample.cfg复制一份,改名为zoo.cfg(因为默认配置文件是这个名字)

  3. 然后退回安装目录,新建一个空的data 和 log

image.png

4 . 进入conf中修改zoo.cfg配置文件,将dataDir=/tmp/zookeeper 修改成 zookeeper 安装目录所在的 data 文件夹,再添加一条添加数据日志的配置(需要根据自己的安装路径修改)。

image.png

5 . 双击 bin目录下的 zkServer.cmd 启动程序:

image.png

6 . 控制台显示 bind to port 0.0.0.0/0.0.0.0:2181,表示服务端启动成功!

image.png

7 . 双击同目录下的zkCli.cmd 启动客户端

image.png

出现 Welcome to Zookeeper!,表示我们成功启动客户端。

注意

当需要一直启动zookeeper时,这两个cmd不能关掉不能关掉不能关掉!!!!!!!要保持运行

Linux


tar -zxvf (你下载的压缩包名称)

cd (你的安装目录)

cd conf/

cp zoo_sample.cfg zoo.cfg

vimzoo.cfg

此处需要按照上边一样修改,注意需要根据自己的安装路径修改 , 同样也得创建data和log,修改端口等​

cd …

cd bin/

sh zkServer.sh start

sh zkCli.sh

  • 如果下载的版本不一样,可能需要自行查看一下帮助命令

详细配置(SpringBoot)

================

多模块开发


此处其实用到了三个模块,一个是公共接口模块,一个是provider模块,一个是consumer模块

其中后两个都共同去依赖公共模块

而provider又依赖consumer模块

想要完整源码的话可以评论区联系一下博主

特别注意

我们两个模块都要去@import com.example.dubbo_interface.service.StuService;

  • 那这里就意味着什么,别的项目得能找到这个包啊,要怎么把公共接口dubbo_interface里边的包暴露出来,可供别人调用呢,这里是用到了maven的install命令,把dubbo_interface这一模块打包到公共仓库去了,这样别的项目就可以引用里边的内容了!

如果对maven这一块还不太熟悉的话,具体可以参照这篇 maven(先给自己挖个坑,整理好了会发出来的)


以下一切配置都完成了之后,记得先打开zookeeper!打开zookeeper!打开zookeeper!

provider提供服务端


yml文件

dubbo:

application:

#配置应用的名称(应用可以是提供者也可以是消费者)

name: dubbo_service

#协议中心

protocol:

#固定的, 是只有provider才需要吗?

name: dubbo

port: 20882

#指定注册中心的位置,127.0.0.1是ip地址,2181是端口号

registry:

address: zookeeper://127.0.0.1:2181

######这里是关键,很多教程没有配置,导致zookeeper连接不上

timeout: 50000

#要暴露的服务所在的包(配置扫包)

#也可以在注解那里扫包

scan:

base-packages: com.example.dubbo_service.service

#指定该项目模块启动的端口,不可与其他项目端口重复

server:

port: 8081

具体Service服务端

package com.example.dubbo_service.service;

import com.example.dubbo_interface.service.StuService;

import org.apache.dubbo.config.annotation.DubboService;

//暴露服务

@DubboService

public class StuServiceImpl implements StuService {

@Override

public String login() {

return “111”;

}

}

引入Dubbo依赖和控制zookeeper的客户端

这里使用的是2.7.8版本,搭配2.5.5版本的Springboot

注意依赖接口模块

com.example

dubbo_interface

0.0.1-SNAPSHOT

org.apache.dubbo

dubbo-spring-boot-starter

2.7.8

org.apache.curator

curator-recipes

5.1.0

org.apache.curator

curator-framework

5.1.0

启动类

@EnableDubbo注解一般写在启动类上,默认会扫描当前注解所在类的包路径下的所有**@Dubboservice**标注的组件,如果需要自定义扫描注册的bean(服务实现),可以使用@DubboComponentScan或扫描属性实现。另外,@EnableDubbo注解等效于在配置文件中使用dubbo.scan.base-packages一步到位(开启dubbo功能+扫描dubbo的服务实现bean)

package com.example.dubbo_service;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

//开启基于注解的Dubbo功能,同时扫描要暴露的服务端所在的位置

@EnableDubbo(scanBasePackages = “com.example.dubbo_service.service”)

@SpringBootApplication

public class DubboServiceApplication {

public static void main(String[] args) {

SpringApplication.run(DubboServiceApplication.class, args);

}

}

consumer消费者端


注意,其不同于传统的service,这里为了能独立启动,也要设置成web项目那种(再借助Springboot启动)

yml文件

dubbo:

application:

#指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)

name: dubbo_controller

consumer不需要这个通信协议,因为consumer无需通过Dubbo来远程调用

protocol:

name: dubbo

port: 20881

#指定注册中心的位置,127.0.0.1是ip地址,2181是端口号

registry:

address: zookeeper://127.0.0.1:2181

######这里是关键,很多教程没有配置,导致zookeeper连接不上

timeout: 50000

##发现按照官网只配consumer的话,也还是连不到zookeeper的

consumer:

##后来发现这里就等效于DubboReference注解那里的timeout设置

timeout: 3000

##此处是用在暴露扫包的,consumer不需要暴露服务

scan:

base-packages: com.example.dubbo_service.service

#指定该项目模块启动的端口,不可与其他项目端口重复

server:

port: 8082

具体Controller消费者端

package com.example.dubbo_controller.controller;

import com.example.dubbo_interface.service.StuService;

import org.apache.dubbo.config.annotation.DubboReference;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

@RequestMapping(“/stu”)

public class StuController {

/**

  • 远程注入

  • 从zookeeper注册中心获取该service的访问url

  • 进行远程调用RPC

  • 将结果封装成一个代理对象,给变量赋值

*/

//没timeout好像就出问题了??连不上??

//也可以在yml里边的consumer的timeout进行配置

@DubboReference/(timeout = 5000)/

StuService stuService;

@RequestMapping(“/login”)

public String login(){

return stuService.login();

}

}

同上引入依赖

com.example

dubbo_interface

0.0.1-SNAPSHOT

org.apache.dubbo

dubbo-spring-boot-starter

2.7.8

org.apache.curator

curator-recipes

5.1.0

org.apache.curator

curator-framework

5.1.0

启动类

package com.example.dubbo_controller;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

//开启基于Dubbo的注解

@EnableDubbo

@SpringBootApplication

public class DubboControllerApplication {

public static void main(String[] args) {

SpringApplication.run(DubboControllerApplication.class, args);

}

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

2021年Java中高级面试必备知识点总结

在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。

本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。

目录:

(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)

部分内容:

对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。

不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
: 33%;" />

2021年Java中高级面试必备知识点总结

在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。

本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。

目录:

[外链图片转存中…(img-Bzdfmg7I-1712446095324)]

(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)

[外链图片转存中…(img-8y3Jyji1-1712446095324)]

部分内容:

[外链图片转存中…(img-C7xhj4MJ-1712446095325)]

[外链图片转存中…(img-4uZLsKAa-1712446095325)]

[外链图片转存中…(img-GzIzd2ov-1712446095325)]

对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。

不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值