springboot+dubbo+zookeeper详细搭建

环境搭建

启动zookeeper

一、下载zookeeper3.4
连接:[https://pan.baidu.com/s/1SaY54tOBj69RAZ-eASf4xw]
提取码:o4od
二、进入\zookeeper\conf目录下,将zoo_sample文件名称改为修改zoo,
三、修改zoo内容,修改内容以下html

# The number of milliseconds of each tick
tickTime=5000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=D:\\install\\zookeeper-3.4.14\\data
dataLogDir=D:\\install\\zookeeper-3.4.14\\log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
# maxClientCnxns=60
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
# The number of snapshots to retain in dataDir
# autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
# autopurge.purgeInterval=1

四、启动zookeeper(bin目录下点击zkServer的window版本文件),(port:2181是zookeeper的专用监听端口)java

启动dubbo-addmin-2.6.0监控平台(可省)

一、下载dubbo-admin-2.6.0插件包
连接:https://pan.baidu.com/s/1aSJ6c_fNhVCU1iHJenS13w
提取码:jw8k
二、 j将包复制到另外一个tomcat的webapps下,启动tomcat(tomcat的bin目录下点击startup的window版本文件)
三、 http://localhost:8080/dubbo-admin-2.6.0访问,帐号密码都是root
四、由于尚未启动项目提供者服务,因此监控平台未暴露项目接口, 此图已启动服务提供者
在这里插入图片描述mysql

服务提供者

建立服务提供者项目,模块名称springboot-dubbo(maven项目)

引包

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.1.RELEASE</version>
</parent>
<properties>
    <dubbo-spring-boot>2.0.0</dubbo-spring-boot>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<!--dubbo-springBoot依赖 -->
<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<!-- zookeeper -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.14</version>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>

配置参数

server.port=8081
server.context-path=/provider

#mybatis的xml文件映射路径
mybatis.mapper-locations=classpath*:mybatis

#数据源datasources,结合本身mysql数据库
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

#注册中心的协议和地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.server=true
#通讯规则(通讯协议和接口)
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
#当前服务/应用名称
spring.dubbo.application.id=provider-id
spring.dubbo.application.name=provider
#扫描包
spring.dubbo.scan=com.li.dubbo.dubbo.bizc.impl

启动类

package com.li.dubbo.dubbo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;

@SpringBootApplication
@EnableDubboConfiguration
public class DubboApplication {

	public static void main(String[] args) {
		try {
		    SpringApplication.run(DubboApplication.class, args);
			Thread.sleep(1*1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

demo

package com.li.dubbo.dubbo.model;

import java.io.Serializable;

public class User implements Serializable{

	private static final long serialVersionUID = 1L;
	
	private String name;
	private String addr;
	private String time;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public String getTime() {
		return time;
	}
	public void setTime(String time) {
		this.time = time;
	}
	
}
package com.li.dubbo.dubbo.bizc;

import com.li.dubbo.dubbo.model.User;

public interface IUserService {

	public User getUserMsg(String userName);
}
package com.li.dubbo.dubbo.bizc.impl;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Service;
import com.li.dubbo.dubbo.bizc.IUserService;
import com.li.dubbo.dubbo.model.User;

@Component
@Service(version="2.0.0",interfaceClass = IUserService.class)
public class UserServiceImpl implements IUserService{
	private static Logger logger=Logger.getLogger(UserServiceImpl.class);

	@Override
	public User getUserMsg(String userName) {
		logger.info("----------进入生产者service getUserMsg方法----------userName:"+userName);
		User user=new User();
		user.setName("provider");
		user.setAddr("杭州余杭文一西路双龙街");
		user.setTime("2019-06-25");
		return user;
	}

}

服务消费者

建立一个服务消费者maven项目

引包

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.1.RELEASE</version>
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
 
<!--dubbo-springBoot依赖 -->
<dependency>
	<groupId>com.alibaba.spring.boot</groupId>
	<artifactId>dubbo-spring-boot-starter</artifactId>
	<version>2.0.0</version>
</dependency>
<dependency>
	<groupId>com.101tec</groupId>
	<artifactId>zkclient</artifactId>
	<version>0.10</version>
</dependency>
<!-- 引入服务端包 -->
<dependency>
   <groupId>com.li.project</groupId>
   <artifactId>springboot-dubbo</artifactId>
   <version>0.0.1-SNAPSHOT</version>
</dependency>

配置

server.port=8082
server.context-path=/consumer

#mybatis映射文件路径
mybatis.mapper-locations=classpath*:mybatis

#数据源datasource配置,结合本身mysql数据库
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=

#注册中心的协议和地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.server=true
#通讯规则(通讯协议和接口)
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
#当前服务/应用名称
spring.dubbo.application.name=consumer
#扫描包
spring.dubbo.scan=com.li.dubbo.consumer.biz.impl

启动类

package com.li.dubbo.consumer;

import java.io.IOException;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;

@SpringBootApplication
@EnableDubboConfiguration
public class ClientApplication {
	
	public static void main(String[] args) {
		SpringApplication.run(ClientApplication.class, args);
		try {
			System.in.read();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

demo

package com.li.dubbo.consumer.biz;

import com.li.dubbo.dubbo.model.User;

public interface IUserConsumerService {

	/** * 获取生产者返回数据 * @param privateName * @return */
	public User getPrivateMsg(String privateName);
}
package com.li.dubbo.consumer.biz.impl;

import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Reference;
import com.li.dubbo.consumer.biz.IUserConsumerService;
import com.li.dubbo.dubbo.bizc.IUserService;
import com.li.dubbo.dubbo.model.User;

@Component
public class UserConsumerService implements IUserConsumerService{
	
	@Reference(version="2.0.0")
	IUserService iUserService;

	public IUserService getiUserService() {
		return iUserService;
	}

	public void setiUserService(IUserService iUserService) {
		this.iUserService = iUserService;
	}
	
	@Override
	public User getPrivateMsg(String privateName) {
		// TODO Auto-generated method stub
		return iUserService.getUserMsg(privateName);
	}
	
}

将IUserConsumerService接口注入controller层便可
@Autowired
private IUserConsumerService iUserConsumerService;web

package com.li.dubbo.consumer.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.li.dubbo.consumer.biz.IUserConsumerService;
import com.li.dubbo.dubbo.model.User;

@RestController
@RequestMapping("/client")
public class DubboTestController {
	
	@Autowired
	private IUserConsumerService iUserConsumerService;
	
	@RequestMapping("/f02")
	public User getServerResponseResult(){
		return iUserConsumerService.getPrivateMsg("client");
	}
}

测试

在这里插入图片描述