SpringBoot+Dubbo+Zookeeper的简单整合

之前写过dubbo的简单项目,用的是Spring+Dubbo,约摸看了下博客的创建时间,然后默默捂了下脸,已经是一年多前的事了。

由于Dubbo最近在疯狂地更新,相信死灰复燃还是有小宇宙可以燃烧的。

这次带来的是SpringBoot+Dubbo+Zookeeper的简单整合,客官们可要赏脸看一看。

首先看下项目的结构,如下图所示(发现现在博客强制加了水印,这水印真的是人类交流的最大阻碍了):

SpringBoot+Dubbo+Zookeeper的简单整合_第1张图片

项目名为dubbodemo,它下边分为三个模块,这里贴出pom.xml代码:



	4.0.0

	com.example
	dubbodemo
	0.0.1-SNAPSHOT
	jar

	dubbodemo
	Demo project for Spring Boot

	
		provider
		consumer
		api
	
	

接下来分别介绍三个模块的角色。

api

SpringBoot+Dubbo+Zookeeper的简单整合_第2张图片

api中存放entity实体类和service接口,consumer和provider模块都需要依赖这个模块。

User.java,实体类根据需要自己编写,但要注意的是需要实现Serializable这个接口,因为dubbo是RPC框架,消费者consumber和服务提供者privoder的交流通过网络传输,在网络中传输实体是需要将实体对象序列化的。

public class User implements Serializable {

    private static final long serialVersionUID = 7739394865008699599L;

    private Long id;

    private String username;

    private String 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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

UserService.java

public interface UserService {

    User getUser();
}

pom.xml



	4.0.0

	com.example
	api
	0.0.1-SNAPSHOT
	jar

	api

consumer

consumer作为消费者的角色,可以存放controller控制类,当然,如果有其他的,比例拦截器,权限控制,也可以放这里。

SpringBoot+Dubbo+Zookeeper的简单整合_第3张图片

consumer是消费者的角色

UserController.java,注意,这里自动注入的注解是@Reference,是dubbo提供的注解,如果用@Autowired,会提供找不到类。

@RestController
@RequestMapping("/user")
public class UserController {

    @Reference(version = "1.0.0")
    private UserService userService;

    @RequestMapping("/getUser")
    public User getUserList() {
        return userService.getUser();
    }
}

application.properties

## 避免和provider工程端口冲突
server.port=7001
## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
## Dubbo 服务对象的注册中心zookeeper的地址和端口
spring.dubbo.registry.address=zookeeper://localhost:2181
##  服务对象的被注入的包扫描范围
spring.dubbo.scan=com.example.consumer.controller

pom.xml



	4.0.0

	com.example
	consumer
	0.0.1-SNAPSHOT
	jar

	consumer
	Demo project for Spring Boot

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

	
		UTF-8
		UTF-8
		1.8
		1.0.0
	

	
        
        
		
			com.example
			api
			0.0.1-SNAPSHOT
		

		
			org.springframework.boot
			spring-boot-starter
		

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

		
		
			io.dubbo.springboot
			spring-boot-starter-dubbo
			${dubbo-spring-boot}
			
				
					slf4j-log4j12
					org.slf4j
				
			
		

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

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


provider

provider作为消费者角色,可以存放service接口的实现类,如果项目中集成了mybatis,也可以放在这个模块下

SpringBoot+Dubbo+Zookeeper的简单整合_第4张图片

UserServiceImpl.java,注意这里的@Service注解,是dubbo提供的注解

@Service(version = "1.0.0")
public class UserServiceImpl implements UserService {

    @Override
    public User getUser() {
        User user = new User();
        user.setId(1L);
        user.setUsername("没想到吧");
        user.setPassword("123456");
        return user;
    }
}

application.properties

server.port=8001
## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
## Dubbo 服务对象的注册中心zookeeper的地址和端口
spring.dubbo.registry.address=zookeeper://localhost:2181
## 用Dubbo协议在20880端口暴露服务
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
## 包扫描范围
spring.dubbo.scan=com.example.provider.serviceimpl

pom.xml



	4.0.0

	com.example
	provider
	0.0.1-SNAPSHOT
	jar

	provider
	Demo project for Spring Boot

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

	
		UTF-8
		UTF-8
		1.8
		1.0.0
	

	
        
		
			com.example
			api
			0.0.1-SNAPSHOT
		

		
			org.springframework.boot
			spring-boot-starter
		

		
		
			io.dubbo.springboot
			spring-boot-starter-dubbo
			${dubbo-spring-boot}
            
                
                    slf4j-log4j12
                    org.slf4j
                
            
		

		
		
			org.apache.zookeeper
			zookeeper
			3.4.12
		
		
			com.github.sgroschupf
			zkclient
			0.1
		

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

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



到这里,整合java部分的项目代码就完成了,当然,有人会问了,zookeeper呢???被马桶冲走了吗?是的,zookeeper的注册中心老铁们自行去查找如何搭建,很简单的,就像马桶冲水一样简单。

项目启动

步骤一、首先要启动zookeeper,它是注册中心,没有启动的话,provider的服务提供者怎么注册呢?

步骤二、步骤二要特别注意一点,由于consumer和provider都依赖api,那么要将api模块通过maven,依次通过clean,install命令,将api安装到consumer和provider模块中。

步骤三、启动provider,将服务注册到zookeeper中心中

步骤四、启动consumer。

步骤五、测试结果

访问:http://localhost:7001/user/getUser

返回:{"id":1,"username":"没想到吧","password":"123456"}

至此,有没有发现用SpringBoot集成Dubbo特别简单

各位老板,接下来看你们的了

你可能感兴趣的:(SpringBoot+Dubbo+Zookeeper的简单整合)