最近开始接触了分布式的一些东西,这里给自己作一个学习笔记。

这里只是做一个运行demo,具体的理论知识就不在这里阐述了。

1.zookeeper的安装与启动

下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper

下载完成之后,解压,进入到"conf"目录下,新建一个"zoo.cfg"

内容如下:

tickTime=2000
dataDir= /Users/chenqimiao/zookeeper-3.4.8/data
dataLogDir=/Users/chenqimiao/zookeeper-3.4.8/logs
clientPort=2181

参数说明:

#tickTime: zookeeper中使用的基本时间单位, 毫秒值.
#dataDir: 数据目录. 可以是任意目录.
#dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和#dataDir相同的设置.
#clientPort: 监听client连接的端口号.

执行

以上介绍的就是zookeeper的单机模式。当然还有伪分布式和分布式的部署方式,这里就不再阐述,有兴趣的可以自行百度。

2.dubbo-admin的部署

介于每个人机子的环境都不尽相同,我建议大家可以自行打包所需war包。

我这里给出一个dubbo的下载地址:http://github.com/alibaba/dubbo,下载全部的文件之后。

执行如下命令

之后找到dubbo-master/dubbo-admin/target路径下面的dubbo-admin-2.5.4-SNAPSHOT.war包。

把这个包丢到tomcat进行部署就ok了。

3.利用IDEA构建spring boot生产者和消费者

一路next完成之后,在pom中加入如下依赖(dubbo和zookeeper)

        <dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.4.10</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>

接下来先构建一个生产者

来一个测试接口:

package com.example.service;

/**
* Created by chenqimiao on 17/3/24.
*/
public interface TestService { String sayHello(String name); }

来一个实现类

package com.example.service.impl;

import com.example.service.TestService;

/**
* Created by chenqimiao on 17/3/24.
*/
public class TestServiceImpl implements TestService { @Override
public String sayHello(String name) { return "Hello " + name + "!";
}
}

在resource下面加入一个providers.xml,添加如下配置

<?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://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="dubbo-provider" owner="dubbo-provider"/>
<dubbo:registry address="zookeeper://localhost:2181" check="false" subscribe="false"/>
<dubbo:service interface="com.example.service.TestService" ref="testService"/>
<bean id="testService" class="com.example.service.impl.TestServiceImpl"></bean> </beans>

启动类:

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource; @SpringBootApplication
@ImportResource(value = {"classpath:providers.xml"})
public class DubboProviderApplication { public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}

最后在application.properties中加入启动端口:

server.port=8011

at last run application!

那么我们就可以在admin管理界面,看到这个注册的生产者服务

同样的道理 接下来我们来构建消费者 。消费者的依赖和生产者一致,这里不再重复。

在resource下加入consumer.xml,配置如下

<?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://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="dubbo-consumer"/>
<dubbo:registry check="false" address="zookeeper://localhost:2181"/>
<dubbo:reference interface="com.example.service.TestService" id="testService"/>
</beans>

来一个controller

package com.example.controller;

import com.example.service.TestService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; /**
* Created by chenqimiao on 17/3/24.
*/
@Controller
public class TestController { @Resource
private TestService testService;
@RequestMapping(value = "/" ,produces = "application/json;charset=utf-8")
@ResponseBody
public String test(){
return testService.sayHello("Chenqimiao");
}
}

启动之后,首先我们发现服务有了消费者

紧接着,我们用chrome请求restful接口,消费者服务通过RPC调用请求生产者提供的服务,经过两层服务调用返回后,chrome得到最终的response。

大致这样就完成了简单的分布式项目构建。但在其中我碰到了一个小小问题 ,不知道社区的朋友有没有办法!

IDEA不会检测dubbo的远程调用,导致这里误报了一个ERROR,有朋友知道怎么关闭这个错误嘛?

zookeeper + dubbo + spring boot的更多相关文章

  1. Running Dubbo On Spring Boot

    Dubbo(http://dubbo.io/) 是阿里的开源的一款分布式服务框架.而Spring Boot则是Spring社区这两年致力于打造的简化Java配置的微服务框架. 利用他们各自优势,配置到 ...

  2. Dubbo在Spring和Spring Boot中的使用

    一.在Spring中使用Dubbo 1.Maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifa ...

  3. Spring Boot 中如何使用 Dubbo Activate 扩展点

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 公司的核心竞争力在于创新 – <启示录> 』 继续上一篇:< Spri ...

  4. 玩转Spring Boot 集成Dubbo

    玩转Spring Boot 集成Dubbo 使用Spring Boot 与Dubbo集成,这里我之前尝试了使用注解的方式,简单的使用注解注册服务其实是没有问题的,但是当你涉及到使用注解的时候在服务里面 ...

  5. 高效开发 Dubbo?用 Spring Boot 可得劲!

    不仅简化了 Dubbo 基于 xml 配置的方式,也提高了日常开发效率,甚至提升了工作幸福感. 为了节省亲爱的读者您的时间,请根据以下2点提示来阅读本文,以提高您的阅读收获效率哦. 如果您只有简单的 ...

  6. Spring Boot中使用Dubbo

    高并发下Redis会出现的问题: 缓存穿透 缓存雪崩 热点缓存 一.定义commons工程11-dubboCommons (1) 创建工程 创建Maven的Java工程,并命名为11-dubboCom ...

  7. Spring Boot源码(二):SPI去除web.xml

    SPI广泛用于dubbo,spring boot,spring cloud alibaba等 关于SPI,可见SPI-Service Provider Interface 继续上篇文章 上面三句代码的 ...

  8. 适合初学者的一个分布式环境搭建过程(spring boot + zookeeper + dubbo + mybatis + mysql)

    本人也是才开始接触 阿里巴巴的开源分布式框架 dubbo,因为现在微服务框架 spring boot也非常的火,然后结合dubbo的官网搭建这个开发环境. 一.首先 zookeeper作为集群管理服务 ...

  9. Spring boot + mybatis + dubbo + zookeeper + mysql + mybatis-generator 一个小demo

    代码的链接地址:https://gitee.com/frostGG/springbooo_dubbo_demo.git 1.项目的目录经构: 介绍: 这一个项目,用的是阿里的dubbo,和zookee ...

随机推荐

  1. canvas动态小球重叠效果

    前面的话 在javascript运动系列中,详细介绍了各种运动,其中就包括碰壁运动.但是,如果用canvas去实现,却是另一种思路.本文将详细介绍canvas动态小球重叠效果 效果展示 静态小球 首先 ...

  2. 第七届蓝桥杯javaB组真题解析-凑算式(第三题)

    题目 /* 凑算式 B DEF A + --- + ------- = 10 C GHI (如果显示有问题,可以参见[图1.jpg]) 这个算式中A~I代表1~9的数字,不同的字母代表不同的数字. 比 ...

  3. C# 基于DotRas的VPN管理

    由于工作环境有部分网址被公司屏蔽,特意做了个VPN管理工具,在想访问公司被屏蔽的网址时就开启连接,不用时就关掉.对于做安卓开发的或者.net core类库更新还是很方便的,现在把运行效果展示一下: 点 ...

  4. php中 0 与 字符串比较的问题

    今天我的技术群里,被一个很不起眼的问题炸出很多基础不稳的phper,就是这么一句 : <?php if(0 == 'yes'){ echo 'yes'; }else{ echo 'no'; } ...

  5. 使用node-inspector调试nodejs程序<nodejs>

    1.npm install -g node-inspector  // -g 导入安装路径到环境变量 一般是c盘下AppData目录下 2.node-inspector & //启动node- ...

  6. webkit 渲染机制

    最近看了< webkit技术内幕 >,虽然并不能完全看懂,但是对浏览器的渲染机制也算是有了一个比较完整的认识. 我们从浏览器地址栏输入网址开始到web页面被完整的呈现在眼前,大概的经过了这 ...

  7. Javascript 闭包与高阶函数 ( 一 )

    上个月,淡丶无欲 让我写一期关于 闭包 的随笔,其实惭愧,我对闭包也是略知一二 ,不能给出一个很好的解释,担心自己讲不出个所以然来. 所以带着学习的目的来写一写,如有错误,忘不吝赐教 . 为什么要有闭 ...

  8. jQuery_第二章_定时器

  9. 【CNMP系列】CNMP之路,系统起步。

    简单的来理解,我所说的CNMP,不是CNM+P,而是CentOs+Nginx+MySql+PHP,也可以单纯的理解为LNMP,但是系统是我们自己选的,虽说是Linux的一个分支,但我就喜欢CentOs ...

  10. YUM 安装及清理

    Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理 ...