dubbo+zookeeper示例代码_Springboot2(56)集成dubbo+zookeeper

运行环境: JDK1.8、Tomcat8

技术栈:

springboot-2.1.1

dubbo-2.6.2

dubbo-spring-boot-starter-0.2.0

zookeeper-3.4.13

dubbo-admin-2.5.10

1、Zookeeper的安装和启动(单节点):

Java代码

将zookeeper-3.4.13.tar.gz安装包上传到Linux服务器的/opt/software/zookeeper目录下

解压安装包: tar -zxvf zookeeper-3.4.13.tar.gz

定位到/opt/software/zookeeper/zookeeper-3.4.13目录,分别创建名为data、dataLog的文件夹

定位到/opt/software/zookeeper/zookeeper-3.4.13/conf目录,创建zoo.cfg配置文件,文件内容如下:

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/opt/software/zookeeper/zookeeper-3.4.13/data

dataLogDir=/opt/software/zookeeper/zookeeper-3.4.13/dataLog

clientPort=2181

将2181端口添加到防火墙,确保客户端能正常访问到该端口

firewall-cmd --zone=public --add-port=2181/tcp --permanent

定位到/opt/software/zookeeper/zookeeper-3.4.13/bin目录下,执行 ./zkServer.sh start 命令启动zk服务

2、dubbo-admin的安装:

Java代码

将dubbo-admin.war安装包复制到Tomcat的webapps目录下

执行bin/startup.bat启动tomcat,然后停止tomcat

修改webappsdubbo-adminWEB-INFdubbo.properties配置文件的dubbo.registry.address参数值

dubbo.registry.address=zookeeper://192.168.134.134:2181

再次启动tomcat

以root账号登录

fb5be3a1dadb9cb9f3beecc052838de8.png

3、maven多模块项目的创建

创建一个maven项目dubbo,包括三个模块子项目,分别为:

dubbo-api: 存放服务接口、bean类等公共文件

dubbo-provider: 服务提供者工程

dubbo-consumer: 服务消费者工程

主项目的pom.xml文件配置:

Xml代码

66139905d26c891f7d48e1131e56fcf0.png

<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.study.dubbo</groupId>

<artifactId>dubbo</artifactId>

<version>1.0.0</version>

<packaging>pom</packaging>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.1.RELEASE</version>

<relativePath/>

</parent>

<properties>

<java.version>1.8</java.version>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

</properties>

<dependencies>

<!-- springboot -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-devtools</artifactId>

<optional>true</optional>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

</dependency>

<!-- dubbo -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo</artifactId>

<version>2.6.2</version>

</dependency>

<dependency>

<groupId>com.alibaba.boot</groupId>

<artifactId>dubbo-spring-boot-starter</artifactId>

<version>0.2.0</version>

</dependency>

<dependency>

<groupId>com.alibaba.boot</groupId>

<artifactId>dubbo-spring-boot-actuator</artifactId>

<version>0.2.0</version>

</dependency>

<dependency>

<groupId>com.alibaba.boot</groupId>

<artifactId>dubbo-spring-boot-autoconfigure</artifactId>

<version>0.2.0</version>

</dependency>

<dependency>

<groupId>com.alibaba.spring</groupId>

<artifactId>spring-context-support</artifactId>

<version>1.0.2</version>

</dependency>

<!-- zookeeper -->

<dependency>

<groupId>org.apache.zookeeper</groupId>

<artifactId>zookeeper</artifactId>

<version>3.4.9</version>

<exclusions>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

</exclusion>

<exclusion>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>org.apache.curator</groupId>

<artifactId>curator-framework</artifactId>

<version>2.12.0</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<scope>test</scope>

</dependency>

</dependencies>

<modules>

<module>dubbo-api</module>

<module>dubbo-provider</module>

<module>dubbo-consumer</module>

</modules>

</project>

4、dubbo-api工程

User.java

Java代码

package com.study.dubbo.api.bean;

import java.io.Serializable;

public class User implements Serializable{

private static final long serialVersionUID = -8832914162040512009L;

private Long id;

private String username;

private String password;

public User(){

}

public User(Long id, String username, String password){

this.id = id;

this.username = username;

this.password = password;

}

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public Long getNowtime() {

return System.currentTimeMillis();

}

}

UserService.java —— 服务接口类

Java代码

package com.study.dubbo.api.service;

import com.study.dubbo.api.bean.User;

/**

* 定义dubbo服务接口

*/

public interface UserService {

public User getUser(long id);

}

5、dubbo-provider工程

UserServiceImpl.java —— 服务接口的实现类

Java代码

package com.study.dubbo.provider.service;

import org.springframework.stereotype.Component;

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

import com.study.dubbo.api.bean.User;

import com.study.dubbo.api.service.UserService;

/**

* dubbo服务接口的实现类,使用@Service注解暴露dubbo服务

*/

@Service(interfaceClass=UserService.class, version="1.0.0", timeout=10000)

@Component

public class UserServiceImpl implements UserService {

@Override

public User getUser(long id) {

return new User(id, "zhangsan", "123");

}

}

application.properties

Java代码

server.port=8001

server.servlet.context-path=/dubbo-provider

##dubbo

dubbo.scan.basePackages=com.study.dubbo.provider.service

dubbo.application.name=provider-name

dubbo.protocol.name=dubbo

dubbo.protocol.port=20880

dubbo.registry.protocol=zookeeper

dubbo.registry.address=192.168.134.134:2181

pom.xml文件:

Xml代码

<?xml version="1.0"?>

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<modelVersion>4.0.0</modelVersion>

<artifactId>dubbo-provider</artifactId>

<packaging>jar</packaging>

<parent>

<groupId>com.study.dubbo</groupId>

<artifactId>dubbo</artifactId>

<version>1.0.0</version>

<relativePath>../pom.xml</relativePath>

</parent>

<dependencies>

<dependency>

<groupId>com.study.dubbo</groupId>

<artifactId>dubbo-api</artifactId>

<version>1.0.0</version>

</dependency>

</dependencies>

<build>

<finalName>dubbo-provider</finalName>

</build>

</project>

Main.java

Java代码

package com.study.dubbo;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

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

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

@RestController

@SpringBootApplication()

public class Main{

public static void main(String[] args){

SpringApplication springApp = new SpringApplication(Main.class);

springApp.run(args);

}

@RequestMapping("/index")

public String greeting() {

return "hello provider";

}

}

执行Main.java类,启动服务提供者工程应用。

6、dubbo-consumer工程

ServiceConsumer.java

Java代码

package com.study.dubbo.consumer.service;

import org.springframework.stereotype.Service;

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

import com.study.dubbo.api.service.UserService;

@Service

public class ServiceConsumer {

/**

* 消费dubbo服务

*/

@Reference(version="1.0.0")

private UserService userService;

public UserService getUserService() {

return userService;

}

public void setUserService(UserService userService) {

this.userService = userService;

}

}

application.properties

Java代码

server.port=8002

server.servlet.context-path=/dubbo-consumer

##dubbo

dubbo.application.name=consumer-name

dubbo.registry.protocol=zookeeper

dubbo.registry.address=192.168.134.134:2181

pom.xml文件

Xml代码

<?xml version="1.0"?>

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<modelVersion>4.0.0</modelVersion>

<artifactId>dubbo-consumer</artifactId>

<packaging>jar</packaging>

<parent>

<groupId>com.study.dubbo</groupId>

<artifactId>dubbo</artifactId>

<version>1.0.0</version>

<relativePath>../pom.xml</relativePath>

</parent>

<dependencies>

<dependency>

<groupId>com.study.dubbo</groupId>

<artifactId>dubbo-api</artifactId>

<version>1.0.0</version>

</dependency>

</dependencies>

<build>

<finalName>dubbo-consumer</finalName>

</build>

</project>

Main.java

Java代码

package com.study.dubbo;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

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

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

import com.study.dubbo.api.bean.User;

import com.study.dubbo.consumer.service.ServiceConsumer;

@RestController

@SpringBootApplication()

public class Main{

@Autowired()

private ServiceConsumer serviceConsumer;

public static void main(String[] args){

SpringApplication springApp = new SpringApplication(Main.class);

springApp.run(args);

}

@RequestMapping("/index")

public String greeting() {

User user = serviceConsumer.getUserService().getUser(110L);

return "hello consumer: username=" + user.getUsername() + ", password=" + user.getPassword() + ", nowtime=" + user.getNowtime();

}

}

执行Main.java类,启动服务消费者工程应用。

7、测试验证

刷新dubbo-admin的服务列表页面,可以看到列表中有一个UserService服务

d030fd25eb9c967e01656406324bf67d.png

浏览器访问: http://localhost:8002/dubbo-consumer/index ,页面会显示如下内容:

hello consumer: username=cjm, password=123, nowtime=1545402825287

至此,集成完毕!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值