springboot+dubbo+zookeeper框架搭建
环境搭建
启动zookeeper
1、下载zookeeper3.4
链接:[https://pan.baidu.com/s/1SaY54tOBj69RAZ-eASf4xw]
提取码:o4od
2、进入\zookeeper\conf目录下,将zoo_sample文件名称改成修改zoo,
3、修改zoo内容,修改内容如下
# 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
4、启动zookeeper(bin目录下点击zkServer的window版本文件),(port:2181是zookeeper的专用监听端口)
启动dubbo-addmin-2.6.0监控平台(可省)
1、下载dubbo-admin-2.6.0插件包
链接:https://pan.baidu.com/s/1aSJ6c_fNhVCU1iHJenS13w
提取码:jw8k
2、 j将包复制到另一个tomcat的webapps下,启动tomcat(tomcat的bin目录下点击startup的window版本文件)
3、 http://localhost:8080/dubbo-admin-2.6.0访问,账号密码都是root
4、因为还没有启动项目提供者服务,所以监控平台未暴露项目接口, 此图已启动服务提供者
服务提供者
创建服务提供者项目,模块名称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;
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");
}
}