windows下搭建springboot+zookeeper+dubbo

springboot介绍

1.开箱即用,省去了原来的那么多配置,本身提供了默认的配置

2.内置tomcat,可以使用无war包形式去部署

3.可以开发,上线,测试环境的快速切换

4.简化了maven的配置

5.与spring生态圈的其他组件集成更好

6.很好的支持了微服务,可以快速搭建大型项目,可横向扩展


dubbo介绍

1.dubbo是Alibaba的开源分布式项目,很好的是分布式开发中的各模块之间的耦合

2.他支持多种协议的调用,基于生产消费模型

3.有多种暴露服务的方式,如直连,广播,使用注册中心

而注册中心中又有多种选择

    Multicast注册中心

    Zookeeper注册中心

    Redis注册中心

    Simple注册中心

4.提供了dubbo的监控系统,可以配置负载均衡策略,以及各服务之间的调用关系

这里分享一个很好的讲解dubbo架构的文章

简单之美 | Dubbo架构设计详解

使用dubbo需要注意的事项

①  在生产者和消费者之间传递的类一定要实现序列化接口

②  生产者之间有多个版本的时候一定要定义版本号

③  设置的超时时间要恰到好处否则会失败

④  Spring容器和springmvc的容器初始化的顺序很有可能会导致注入属性失败

⑤  后序待更新……


使用环境

开发工具:Eclipse Mars.2 Release (4.5.2)

JDK: 1.7(springboot2.0以上必须使用jdk1.8)

maven:3.3.9版本

数据库管理工具:Navicat 11.0.7


构建项目


Windows环境下搭建dubbo+zookeeper+springboot的分布式架构,实现rpc(远程调用)的(微服务)


下载zookeeper并解压到指定的文件夹,复制zoo_sample.cfg文件为zoo.cfg文件,因为启动zookeeper服务端的时候会自动寻找zoo.cfg文件


Zookeeper的下载网址https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/这里选用的是3.4.11版本


下载dubbo的dubbo-admin.war文件,这里直接部署到tomcat下就可以看到图形化的监控中心,这里可以配置负载均衡的策略,以及各个服务器之间的权重,以及服务之间的调用关系


这里使用dubbo-admin-2.5.4.war版本,其他的版本或者demo可以直接去alibaba的github上获取https://github.com/alibaba/dubbo


在zookeeper的bin目录下启动zKserver.cmd文件,然后去启动我们准备好的tomcat,确保我们的war文件已经在webapps下,在地址栏访问localhost:8080/admin-dubbo-2.5.4 这里会让我们登录,我们输入账号密码均为root即可.也可以到web-inf下的dubbo.properties中的账号密码,这里zookeeper默认绑定了2181端口


这里容易出现的问题:

① 命令行startup.bat的时候,无法启动,命令行窗口显示5行“Using.........”字样,显示的是JDK和tomcat的环境变量信息,没有其他信息了。


          cmd中输入catalina.bat run,显示错误信息,提示JVM内存设置错误,这个一般是由于之前设置过tomcat参数。


          用notepad打开catalina.bat文件,大概在186行rem ----- Execute The Requested

Command ---------------------------------------下面有之前的设置,屏蔽掉



②tomcat启动到一半的时候,停止在starting zkclient event thread不动

这是由于zookeeper没有启动,启动zkServer.cmd就好了。


4.下面开始创建我们的maven项目

①创建父工程


注意父工程的文件类型是pom



剩下的子工程都是在父工程之上创建(选中父工程)


②包结构如下

         dubbo-yiside-pojo是一个jar文件

         dubbo-yiside-commons(这里可以加一些各个模块都使用的工具)是一个jar文件

         dubbo-yiside-dao是一个jar文件(他依赖pojo)

         dubbo-yiside-interface是一个jar文件(他依赖dao)

         dubbo-yiside-web是一个war文件(他依赖dubbo-yiside-interface)

         dubbo-yiside-service是一个war文件(他依赖dubbo-yiside-interface)





接下来导入pom文件(这里不考虑效率问题,将依赖加入到父工程中)




接下来编写生产者(dubbo—yiside-service)与消费者(dubbo-yiside-web)

① 生产者编写如下

需要在buddo-yiside-interface中创建接口

package cn.yiside.service;

public interface UserService {  

  /**     *返回调用信息     *@return     */  

  StringRPCInfo();

}

在service中创建服务的实现类

package cn.yiside.service.Impl ;

import com.alibaba.dubbo.config.annotation.Service;

import cn.yiside.service.UserService;

@Service(group="userService",version="1.0")

public class UserServiceImpl implements UserService {

    publicStringRPCInfo(){  return "hello 这里是生产者!";    }

}

注意这里使用的是dubbo的service注解

然后编写springboot的启动类以及application.properties文件

这里是springboot的启动类

package cn.yiside.service.Impl;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplicationpublic

classApplication {  

  public static void main(String[] args) {  

       SpringApplication.run(Application.class,args);    }

}


Application.propertis文件内容如下

#PROFILES

##dev | prod |

testspring.profiles.active=dev

#EMBEDDED SERVER CON FIGURATION

(ServerProperties)server.port=8091

server.session-timeout=30

server.context-path=server.tomcat.max-threads=100

server.tomcat.uri-encoding=UTF-8#DATASOURCE

spring.datasource.platform=mysql

#spring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.

driverClassName=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://127.0.0.1:3306/sfishuseUnicode=true&characterEncoding=utf8

spring.datasource.username=root

spring.datasource.password=123

spring.datasource.max-active=100

spring.datasource.max-idle=2

spring.datasource.min-idle=1

spring.datasource.initial-size=15

#mybatis

#mybatis.mapperLocations=classpath*:com/iking/provider/*/mapping/*.xml#mybatis.typeAliasesPackage=com.iking.provider.*.model.*

#multipartfilespring.http.multipart.maxFileSize=100Mb

spring.http.multipart.maxRequestSize=1000Mb

#dubbospring.dubbo.application.name=user-provider

spring.dubbo.registry.address=zookeeper://127.0.0.1:2181

spring.dubbo.protocol.name=dubbo

spring.dubbo.protocol.port=20880

spring.dubbo.scan=cn.yiside.service.Impl

spring.dubbo.application.registries.timeout=10000

spring.dubbo.application.registries.session=100000


注意这里的application.name后面的值不能带有特殊的字符比如 空格等等


编写后完后启动启动类即可



成功后会在dubbo的监视系统中看到服务

②  编写消费者(dubbo-yiside-web)

将上面的文件复制一份到application.properties中

改写接下来的两项




编写消费的controller

package cn.yiside.user.controller;

import org.springframework.stereotype.Controller;

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

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

import com.alibaba.dubbo.config.annotation.Reference;

import cn.yiside.service.UserService;

@Controller

@RequestMapping("/user")

public class UserController {   

@Reference(group="userService",version="1.0")// 

@Autowired    private UserService userService;   

@RequestMapping("/rpc")   

@ResponseBody    

public String RPCInfo(){        

StringrpcInfo = userService.RPCInfo();        

 return rpcInfo;    }

}


注意如果是多个实现类的话一定要指定version版本号


编写消费者的启动类

package cn.yiside.user.controller;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication

@ComponentScan("cn.yiside.user.controller")

public classApplication {           

public static void main(String[]args) {          

             SpringApplication.run(Application.class,args);            }

}



启动消费者,可以在dubbo的监控中心看到消费者和生产者



接下来我们在地址栏访问我们服务者的地址,可以看到从消费者传递过来的消息




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容