您的位置:首页 > 编程语言 > Java开发

IDEA上创建 Maven SpringBoot + zookeeper +dubbo 实例

2017-11-07 20:48 816 查看
概述

  首先声明,本文是学习总结类型的博客内容,如有雷同纯属学习。本位主要结合zookeeper和dubbo做个简单实例。目前来说,一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后的常规方案演进历程。



其次,当服务越来越多之后,我们需要做哪些服务治理?



Dubbo主要处理服务,约束服务提供者和消费者之间的关系。Dubbo处理消费者、提供者以及注册的关系如下:



Zookeeper使用

  ZooKeeper 虽然是一个针对分布式系统的协调服务,但它本身也是一个分布式应用程序。ZooKeeper 遵循一个简单的客户端-服务器模型,其中客户端 是使用服务的节点(即机器),而服务器 是提供服务的节点。ZooKeeper 服务器的集合形成了一个 ZooKeeper 集合体(ensemble),这里简单记录Zookeeper使用;

  下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper 下载之后,解压发现里面有双击zkServer.cmd(Window双击即可,Linux则需要zkServer.sh)启动zookeeper。默认打开是2181端口,双击zkCli.cmd(Window环境下)启动客户端测试下服务端。在客户端可以输入常用的zookeeper指令:

1、显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
2、显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
3、创建文件,并设置初始内容 create [-s] [-e] path data acl 其中-s或-e分别指定节点特性,顺序或临时节点,若不指定,则表示持久节点;
acl用来进行权限控制。举例使用如下: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串
4、获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
5、修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置
6、删除文件: delete /zk 将刚才创建的 znode 删除
7、退出客户端: quit
8、帮助命令: help


  当然也可以通过,客户端管理软件查询当前zookeeper的使用情况。下载:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip ;解压缩后点击ZooInspector\build\zookeeper-dev-ZooInspector.jar 点击左上角的绿色按钮,输入ZK Server的地址和端口,连接成功后就能看到ZK的节点数据信息。

代码编写

Parent编码

定义Parent公用项目,里面的pom.xml内容如下

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>

<groupId>com.justin</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<name>parent</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<dubbo-spring-boot>1.0.0</dubbo-spring-boot>
</properties>

<dependencies>
<!-- Spring Boot Dubbo 依赖 -->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>${dubbo-spring-boot}</version>
</dependency>
<!-- Spring Boot Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- Spring Boot Test 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>


定义公用的实体

package com.justin.dubbo.domain;

import java.io.Serializable;

public class City implements Serializable {

private static final long serialVersionUID = -1L;

/**
* 城市编号
*/
private Long id;

/**
* 省份编号
*/
private Long provinceId;

/**
* 城市名称
*/
private String cityName;

/**
* 描述
*/
private String description;

public City() {
}

public City(Long id, Long provinceId, String cityName, String description) {
this.id = id;
this.provinceId = provinceId;
this.cityName = cityName;
this.description = description;
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public Long getProvinceId() {
return provinceId;
}

public void setProvinceId(Long provinceId) {
this.provinceId = provinceId;
}

public String getCityName() {
return cityName;
}

public void setCityName(String cityName) {
this.cityName = cityName;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

@Override
public String toString() {
return "City{" +
"id=" + id +
", provinceId=" + provinceId +
", cityName='" + cityName + '\'' +
", description='" + description + '\'' +
'}';
}
}


定义公用的接口

package com.justin.dubbo.service;

import com.justin.dubbo.domain.City;

public interface CityService {
public City findCityByName(String cityname);
}


Provider服务提供者代码

实现公用接口

package com.justin.dubbo.serviceimpl;

import com.justin.dubbo.domain.City;
import com.justin.dubbo.service.CityService;

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

@Service(version = "1.0.0")
public class CityServiceImpl implements CityService {
public City findCityByName(String cityname) {
return new City(1L,2L,"温岭","是我的故乡");
}
}


主程序

@SpringBootApplication
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!Start Service......" );
SpringApplication.run(App.class);

}
}


Application.properties内容

## Dubbo 服务提供者配置
#应用名称
spring.dubbo.application.name=provider
#注册中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#协议名称
spring.dubbo.protocol.name=dubbo
#协议端口
spring.dubbo.protocol.port=20880

#服务类包目录
spring.dubbo.scan=com.justin.dubbo.serviceimplCus服务提供者代码


Customer消费者调用服务代码

调用服务代码项

import com.alibaba.dubbo.config.annotation.Reference;
import com.justin.dubbo.MyCityService.MyServiceCity;
import com.justin.dubbo.domain.City;
import com.justin.dubbo.service.CityService;
import org.springframework.stereotype.Component;

@Component
public class CityServiceImpl implements MyServiceCity
{
@Reference(version = "1.0.0")//调用服务项
private CityService cityService;

@Override
public void printCity() {
String cityName="温岭";
City city=cityService.findCityByName(cityName);
System.out.println(city.toString());
}
}


主程序

import com.justin.dubbo.MyCityService.MyServiceCity;
import com.justin.dubbo.serviceimpl.CityServiceImpl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
* Hello world!
*
*/
@SpringBootApplication
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );

ConfigurableApplicationContext run=  SpringApplication.run(App.class,args);
MyServiceCity cityService = run.getBean(CityServiceImpl.class);
cityService.printCity();
}
}


配置application.properties内容

## 避免和 server 工程端口冲突
server.port=8081

## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.justin.dubbo.service


参考文章

Zookeeper介绍

Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

从头开始搭建一个dubbo+zookeeper平台

实例源码: DEMO下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: