栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Springboot整合dubbo:搭建一个springboot + dubbo的微服务

Springboot整合dubbo:搭建一个springboot + dubbo的微服务

Apache Dubbo 是一款高性能、轻量级的开源服务框架,提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。是一款国内使用较多的SOA架构开发的中间件,其主要由三个部分组成:生产者,消费者,注册中心。注册中心一般使用的是zookeeper。
现在从头来捋一捋如何搭建一个springboot+dubbo项目。
首先,使用创建一个springboot项目,我这里使用的是SpringToolSuite4,这也是Eclipse工具不过整合了Springboot的常用的一些插件,跟IDEA类似。
由于dubbo的注册中心是用的zookeeper,所以首先需要去官网下载一个,这里用的是zookeeper-3.4.13,下载好了需要解压该文件,然后进入conf目录,将zoo_sample.cfg文件复制并重命名为zoo.cfg,在进入bin目录双击zkServer.cmd


第二步:构建Springboot项目,由于dubbo的生产者和消费者都会引用类的接口,为了方便会把接口抽成一个公用的模块,所以这里我用创建的是Maven project。结构图如下

第三步:引入Springboot集成dubbo的依赖,生产者和消费者模块都用引用

// 父级pom

  4.0.0
  com.zhouhx.dubbo
  dubbo-demo
  0.0.1-SNAPSHOT
  dubbo-demo
  入门
	 
	 
	 	0.2.0
	 	5.7.9
	 	2.5.3
	 	0.0.1-SNAPSHOT
	 	1.8
	 	UTF-8
        UTF-8
	 
  
  	
  	 
         
             org.springframework.boot
             spring-boot-dependencies
             ${spring-boot.version}
             pom
             import
         
         
            cn.hutool
		    hutool-all
		    ${hutool.version}
		    
        
        
            com.alibaba.boot
            dubbo-spring-boot-starter
            ${dubbo.version}
        
        
  			com.zhouhx.dubbo
  			dubbo-common
  			${project.version}
  		
  	
  
  
  pom
  
  	dubbo-common
  	dubbo-producer
  	dubbo-consumer
  
  
  
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    ${java.version}
                    ${java.version}
                    ${project.build.sourceEncoding}
                
            
        
    

// 生产者

 4.0.0
 
   com.zhouhx.dubbo
   dubbo-demo
   0.0.1-SNAPSHOT
 
 dubbo-producer
 producer
 生产者
 
 		
 			com.zhouhx.dubbo
 			dubbo-common
 		
 		 
           org.springframework.boot
           spring-boot-starter
       

       
           com.alibaba.boot
           dubbo-spring-boot-starter
       
 
 
   
       
           org.springframework.boot
          spring-boot-maven-plugin
       
   
   

var foo = 'bar';
// 消费者

  4.0.0
  
    com.zhouhx.dubbo
    dubbo-demo
    0.0.1-SNAPSHOT
  
  dubbo-consumer
  consumer
  消费者
  
  	
  			com.zhouhx.dubbo
  			dubbo-common
  		
  		
			org.springframework.boot
			spring-boot-starter-web
		
		
            org.springframework.boot
            spring-boot-starter
        
 
        
            com.alibaba.boot
            dubbo-spring-boot-starter
        
  

第四步:创建公用的接口和实体类
// 公用接口
public interface UserService {
	
	public User getUserInfo();
}
//实体类
public class User implements Serializable{
	
	private static final long serialVersionUID = -3304178237669079610L;
	
	private String name;
	
	private int age;
	
	private String sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public User(String name, int age, String sex) {
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	public User() {
		super();
	}

第五步:实现其接口并发布服务

//实现接口并发布
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
import com.alibaba.dubbo.config.annotation.Service;
import com.zhouhx.api.UserService;
import com.zhouhx.entity.User;

@Service
@Component
public class UserServiceImpl implements UserService {
	
	private static Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);

	public User getUserInfo() {
		logger.info("正在开始调用Dubbo服务。。。。。");
		return new User("张三",15,"男");
	}

注意:注解不是用spring的service注解,是 com.alibaba.dubbo.config.annotation.Service

// 在springboot程序入口出启用dubbo服务
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

@SpringBootApplication
@EnableDubbo
public class DubboApplication {

	public static void main(String[] args) {
		SpringApplication.run(DubboApplication.class, args);
	}

}

第六步:修改application.properties配置文件,添加dubbo配置

server.port=8001
#应用名
dubbo.application.name=dubbo-producer
#zookeeper地址
dubbo.registry.address=127.0.0.1:2181
#指定注册中心类型
dubbo.registry.protocol=zookeeper
#传入协议的名称
dubbo.protocol.name=dubbo
#dubbo服务暴露的端口,可自定义
dubbo.protocol.port=20888

这里生产者模块就是实现完成,启动springboot,就能提供一个UserService的接口
第七步:消费者模块调用已经发布的服务

import org.springframework.stereotype.Service;

import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
import com.alibaba.dubbo.config.annotation.Reference;
import com.zhouhx.api.UserService;
import com.zhouhx.demo.service.ConsumerService;
import com.zhouhx.entity.User;

@Service
public class ConsumerServiceImpl implements ConsumerService {
	private static Logger logger = LoggerFactory.getLogger(ConsumerServiceImpl.class);
	
	@Reference
	UserService userService;
	@Override
	public String getUserInfo() {
		logger.debug("dubbo远程调用开始。。。。");
		User userInfo = userService.getUserInfo();
		logger.debug("dubbo远程调用结束,res="+userInfo.toString());
		return "当前用户信息"+userInfo == null ? "空":userInfo.toString();
	}	

dubbo的远程调用是用的@Reference注解,不是spring的@Autowired
第八步:测试
为了方便测试,这里我用了springboot的web的模块

@RestController
public class Publish {
	@Autowired
	ConsumerService consumerService;

	@GetMapping("/demo")
	public String getUserInfo() {
		return consumerService.getUserInfo();
	}
}

页面上输入http://127.0.0.1:8002/demo,页面上显示User [name=张三, age=15, sex=男]

再看消费者模块打印的日志

说明接口已经远程调用成功!
dubbo还提供了一个dubbo-admin控制台,将项目用maven打包成jar包
启用后如下图

项目gitee地址:dubbo-demo
打包好的dubbo-admin-0.4,开箱即用

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/730331.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号