clipse搭建SpringBoot+maven+Dubbo+Zookeeper

一、为什么要用Dubbo
1.远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。 
2.软负载均衡及容错机制: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。 
可在内网替代F5等硬件负载均衡器,降低成本,减少单点。 
3.服务自动注册与发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器 
4.提供完善的管理控制台dubbo-admin与简单的控制中心dubbo-monitor 
5.Dubbo提供了伸缩性很好的插件模型,很方便进行扩展(ExtensionLoader) 
6.支持多协议  
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入, 

只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

二、搭建SpringBoot+maven+Dubbo+Zookeeper(soa服务)
1、windows搭建zookeeper服务和启动服务

1>下载zookeeper,地址:http://apache.fayea.com/zookeeper/

2>解压下载的文件, 然后把解压后文件放到你要的位置。D:\zookeeper\zookeeper-3.4.11

3>进入D:\zookeeper\zookeeper-3.4.11\conf下,将里面的zoo_sample.cfg文件,做一个备份,然后改名为zoo.cfg,因为zookeeper启动后,只认识zoo.cfg中的所有设置和配置

4>在zoo.cfg中输入:

# The number of milliseconds of each tick
tickTime=2000
# 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:\\zookeeper\\zookeeper-3.4.11\\data
dataLogDir=D:\\zookeeper\\zookeeper-3.4.11\\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

5>在D:\zookeeper\zookeeper-3.4.11\下创建log和data文件夹(默认不创建会自动创建,自己创建以免万一)
6>使用cmd,进入D:\zookeeper\zookeeper-3.3.6\bin,运行zkServer.cmd,启动服务,如下图(port:2181是zookeeper的专用监听端口)。

三、springboot-dubbo-server
1>项目结构:

2、本文基于eclipse4.7.2+sts(springsource-tool-suite)+maven3.5.2搭建的,所以之前eclipse必须安装了sts和配置好了maven仓库,sts安装地址:https://jingyan.baidu.com/article/1612d5005fd087e20f1eee10.html。此处不累述了。

sts插件安装好之后.

1>File-new-other-SpringBoot-Spring Starter Project,    Next.

2>填写相应的信息,Next

3>选择依赖web,Finish

4>pom.xml,注意:dubbo内部强制要用log4j,所以此处加上log4j的依赖


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

com.hzg.boot
springboot-dubbo-server
0.0.1-SNAPSHOT
jar

springboot-dubbo-server
Demo project for Spring Boot


org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE


UTF-8
UTF-8
1.8
1.0.0



org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-starter-test
test




log4j
log4j
1.2.17



io.dubbo.springboot
spring-boot-starter-dubbo
${dubbo-spring-boot}




org.springframework.boot
spring-boot-maven-plugin



5>application.properties

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 
#dubbo 资源扫描文件 
spring.dubbo.scan=com.hzg.boot.server.dubbo 
#日志配置          dubbo强制内置log4j  

#logging.config=classpath:logback-boot.xml  

6>建立以下相关class

<1>EmployeeService

package com.hzg.boot.server.dubbo;


import com.hzg.boot.server.entity.Employee;
/**
 * 员工服务层接口
 * @author hzg1214
 *
 */
public interface EmployeeService {
/**
* 根据员工姓名查询 
* @param employeeName
* @return
*/
Employee queryEmployeeByName(String employeeName);

}

<2>EmployeeServiceImpl

package com.hzg.boot.server.dubbo.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.hzg.boot.server.dubbo.EmployeeService;
import com.hzg.boot.server.entity.Employee;

//注册为 Dubbo 服务   此@Service有dubbo提供
@Service(version="1.0.0")
public class EmployeeServiceImpl implements EmployeeService {

@Override
public Employee queryEmployeeByName(String employeeName) {

return new Employee(1,"上海","大城市");
}

}

<3>Employ

package com.hzg.boot.server.entity;


import java.io.Serializable;


/**
 * 员工表
 * 
 * @author hzg1214
 *
 */
public class Employee implements Serializable {

/**

*/
private static final long serialVersionUID = 1L;

private Integer id;
private String employee_name;
private String employee_age;

public Integer getId() {
return id;
}

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

public String getEmployee_name() {
return employee_name;
}

public void setEmployee_name(String employee_name) {
this.employee_name = employee_name;
}

public String getEmployee_age() {
return employee_age;
}

public void setEmployee_age(String employee_age) {
this.employee_age = employee_age;
}

@Override
public String toString() {
return "Employee [id=" + id + ", employee_name=" + employee_name + ", employee_age=" + employee_age + "]";
}

public Employee(Integer id, String employee_name, String employee_age) {
super();
this.id = id;
this.employee_name = employee_name;
this.employee_age = employee_age;
}

public Employee() {
super();
}

}

7>打包项目并运行,右击项目-Run As-Maven clean,成功之后在Run As-Maven build-Goals中输入compile,

启动SpringbootDubboServerApplication

四、搭建springboot-dubbo-client
搭建过程和server大致一样,此处不累述。
1、项目结构

2、相关添加的class

<1>application.properties

#防止服务消费者和提供者端口冲突(一致)
server.port=8888
## Dubbo 消费者  
spring.dubbo.application.name=consumer  
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181  

spring.dubbo.scan=com.hzg.boot.client.dubbo   

<2>EmployeeService 

package com.hzg.boot.client.dubbo;


import com.hzg.boot.client.entity.Employee;


/**
 * 员工服务层接口
 * @author hzg1214
 *
 */
public interface EmployeeService {
/**
* 根据员工姓名查询 
* @param employeeName
* @return
*/
Employee queryEmployeeByName(String employeeName);
}

<3>EmployeeConsumerService 

package com.hzg.boot.client.dubbo;

import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Reference;
import com.hzg.boot.client.entity.Employee;

/**
 * dubbo 员工消费者
 * @author hzg1214
 *
 */
@Component
public class EmployeeConsumerService {

@Reference(version="1.0.0")
EmployeeService employeeService;

public EmployeeService getEmployeeService() {
return employeeService;
}

public void setEmployeeService(EmployeeService employeeService) {
this.employeeService = employeeService;
}

public void printEmployee() {  
        String employeeName = "上海";  
        if(employeeService == null){  
            System.out.println("employeeService 服务对象 为空");  
        }else {
        Employee employee = employeeService.queryEmployeeByName(employeeName);
        System.out.println(employee.toString());  
        }
    }  

}

<4>Employee

package com.hzg.boot.client.entity;

import java.io.Serializable;

public class Employee implements Serializable {

private static final long serialVersionUID = 1L;

private Integer id;
private String employee_name;
private String employee_age;

public Integer getId() {
return id;
}

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

public String getEmployee_name() {
return employee_name;
}

public void setEmployee_name(String employee_name) {
this.employee_name = employee_name;
}

public String getEmployee_age() {
return employee_age;
}

public void setEmployee_age(String employee_age) {
this.employee_age = employee_age;
}

@Override
public String toString() {
return "Employee [id=" + id + ", employee_name=" + employee_name + ", employee_age=" + employee_age + "]";
}
public Employee(Integer id, String employee_name, String employee_age) {
super();
this.id = id;
this.employee_name = employee_name;
this.employee_age = employee_age;
}
public Employee() {
super();
}

}

<5>SpringbootDubboZookeeperClientApplication 中添加

package com.hzg.boot.client;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import com.hzg.boot.client.dubbo.EmployeeConsumerService;


@SpringBootApplication
public class SpringbootDubboZookeeperClientApplication {


public static void main(String[] args) {
ConfigurableApplicationContext  run = SpringApplication.run(SpringbootDubboZookeeperClientApplication.class, args);
EmployeeConsumerService employeeService = run.getBean(EmployeeConsumerService.class);
employeeService.printEmployee();
}
}

<6>启动项目,和server一致。注意先启动server,在启动client

控制即会答应相应的信息。


--------------------- 
作者:hzg1214 
来源:CSDN 
原文:https://blog.csdn.net/hzg1214/article/details/79992693 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(java)