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

概述

  首先声明,本文是学习总结类型的博客内容,如有雷同纯属学习。本位主要结合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下载

时间: 2024-10-06 08:57:01

IDEA上创建 Maven SpringBoot + zookeeper +dubbo 实例的相关文章

IDEA上创建Maven SpringBoot项目

概述 在WEB领域,Java也是在不断的探索和改进,从开始的JSP--->Struts1--->Struts2+Spring--->Spring MVC--->SpringBoot .在WEB领域,Java框架不断的变化与改进.Spring Boot将Spring MVC所需要的依赖包环境集成到一个大的包环境中,便于快速开发,特别适合构建微服务系统,另外给我们封装了各种经常使用的套件,比如mybatis.hibernate.redis.mongodb等.由于Java没有像其他语言(

springboot+Zookeeper+Dubbo入门

最近想学习dubbo,就利用周末写了一个特别简单的demo,不知道有没有用,先记录一下. 1.安装zookeeper并启动(安装看我上一篇博客https://www.cnblogs.com/huangzhang/p/9219319.html) 2.下载dubbo源码,安装dubbo-admin(安装看我之前的博客https://www.cnblogs.com/huangzhang/p/9219296.html) 这些准备工作做好之后开始写demo代码: 这里用的开发工具是Intellij IDE

【MAVEN】如何在Eclipse中创建MAVEN项目

目录结构: contents structure [-] 1,Maven简介 2,Maven安装 2.1,下载Maven 2.2,配置环境变量 2.3,测试 3,Maven仓库 3.1,Maven仓库的工作原理 3.2,修改Maven仓库 4,Eclipse和Maven整合的配置 5,Eclispe中创建Maven项目 5.1,在Eclispe中使用Maven搭建Spring MVC 6,Eclipse中使用MAVEN管理的Web分布式开发 6.1,创建父模块 6.2,创建子模块 1,MAVEN

eclipse创建Maven Project(springboot集成dubbo第一步)

!!!每一种方式都是自己的工具,熟悉就好,献给最初的我与你 创建maven项目 注意此处:我勾选了第一个按钮 1:file->New Maven Project->next     2:输入内容->完成 Group Id :组名 常指公司名(任意) ArtiFact Id :项目名(任意),其它默认   3:项目初步总览(此时项目有感叹号)     3:修改java版本:项目名 右键->properties ->选中 java Build Path ->JRE Syst

ZooKeeper+Dubbo+SpringBoot 微服务Demo搭建

1. 首先创建springBoot项目,springBoot是一堆组件的集合,在pom文件中对需要的组件进行配置.生成如下目录结构 创建test项目,同步在test创建dubbo-api,dubbo-consume,dubbo-provider三个Model dubbo-provider 为服务的提供者,服务的实现层 dubbo-api 为服务提供者dubbo-provider的接口层 (此处dubbo-provider,dubbo-api相当于一个微服务,dubbo-api为对外接口,由消费者

Springboot整合Dubbo和Zookeeper

Dubbo是一款由阿里巴巴开发的远程服务调用框架(RPC),其可以透明化的调用远程服务,就像调用本地服务一样简单.截至目前,Dubbo发布了基于Spring Boot构建的版本,版本号为0.2.0,这使得其与Spring Boot项目整合变得更为简单方便.而Zookeeper在这里充当的是服务注册中心的角色,我们将各个微服务提供的服务通过Dubbo注册到Zookeeper中,然后服务消费者通过Dubbo从Zookeeper中获取相应服务并消费.本文案例的架构图可以简单用下图表示: 本文案例最终项

IDEA 配置maven + SpringBoot项目在新电脑上的配置运行

该教程记录了我在一台新的电脑上安装IDEA,配置JAVA+MAVEN+GIT+SpringBoot项目的过程,最终完成了项目的运行. 一.若想利用IDEA的git工具从GitHub或者码云上面获取项目,需要提前下载git软件,并完成初步的配置. 1. git的下载和配置  进入git官网,https://www.git-scm.com/downloads并下载. 确定自己要下载的版本(我下载的是64bit版本的windows安装程序),点击下载即可. 下载完之后,双击应用程序,一路next即可完

SpringBoot创建maven多模块项目

SpringBoot创建maven多模块项目 项目结构 该项目名称为springboot-maven-multi,由springboot-maven-multi.user-dao.user-domain.user-service.user-web个模块组成,其中springboot-maven-multi模块是其他模块的父模块. 第一步:新建项目springboot-maven-multi File -> New -> Project -> Spring Initializr 如下图:输

springboot使用dubbo和zookeeper

2019-11-17 yls 创建服务接口模块 接口工程只提供接口,不提供实现,在后面的提供者和消费者中使用 在使用接口的模块中只需要写具体实现类,避免了在每个模块中重复编写接口 在接口中引入依赖包 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </