美文网首页分布式我爱编程
windows下搭建springboot+zookeeper+d

windows下搭建springboot+zookeeper+d

作者: 大力水手_ | 来源:发表于2018-03-23 17:15 被阅读309次

    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的监控中心看到消费者和生产者

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

    相关文章

      网友评论

      本文标题:windows下搭建springboot+zookeeper+d

      本文链接:https://www.haomeiwen.com/subject/xlpxcftx.html