RPC远程调用及常用框架之dubbox

RPC远程调用及常用框架之dubbox

    • 说明
    • 首先编译
    • 项目搭建
      • 服务端,客户端依赖
      • 服务端核心代码
        • 配置文件
        • dubbox配置类
        • 服务端接口暴露类
      • 客户端核心代码
        • 配置文件
        • dubbox配置类
        • 获取服务类
    • 运行效果(前提需要运行本地zookeeper)
    • 总结

说明

前一篇介绍了RPC远程调用及常用框架之ICE,今天来看看rpc最后一篇dubbox,关于dubbox简介的话看第一章RPC远程调用及常用框架之Hessian这里不再赘述
RPC远程调用及常用框架之dubbox_第1张图片

首先编译

因为dubbox没有编译发布,所以不能够通过maven拉取远程jar包,需要自己编译安装到自己的本地Maven仓库中下载地址
解压后进入根目录,然后执行命令编译

mvn install -Dmaven.test.skip=true

RPC远程调用及常用框架之dubbox_第2张图片
RPC远程调用及常用框架之dubbox_第3张图片
RPC远程调用及常用框架之dubbox_第4张图片

项目搭建

服务端,客户端依赖

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

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
		
			org.apache.zookeeper
			zookeeper
			3.4.6
			
				
					slf4j-log4j12
					org.slf4j
				
			
		
		
			com.github.sgroschupf
			zkclient
			0.1
		
		
			com.alibaba
			dubbo
			2.8.4
		

		
		
			org.jboss.resteasy
			resteasy-jaxrs
			3.0.7.Final
		
		
			org.jboss.resteasy
			resteasy-client
			3.0.7.Final
		
		
		
			org.jboss.resteasy
			resteasy-jackson-provider
			3.0.7.Final
		

	

服务端核心代码

配置文件



server.port=8090
#应用名
dubbo.application.name=service

#注册zookeeper的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫包
dubbo.annotation.package=com.example.dubbodemo.service
#协议 (有 dubbo、rest、http、hessian、webservice)
dubbo.protocol.name=dubbo
#协议暴露服务的端口(Integer类型)
dubbo.protocol.port=20880

dubbox配置类

package com.example.dubbodemo.config;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.spring.AnnotationBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @auther 高松
 * @DATE 2019/9/4  23:56
 * dubbox-test
 */

@Configuration
public class DubboConfig {

    @Bean
    @ConfigurationProperties(prefix="dubbo.application")
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        return applicationConfig;
    }

    @Bean
    @ConfigurationProperties(prefix="dubbo.registry")
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        return registryConfig;
    }
    @Bean
    @ConfigurationProperties(prefix="dubbo.annotation")
    public AnnotationBean annotationBean() {
        AnnotationBean annotationBean = new AnnotationBean();
        return annotationBean;
    }

    @Bean
    @ConfigurationProperties(prefix="dubbo.protocol")
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        return protocolConfig;
    }
}

服务端接口暴露类

接口
public interface TestService {
 String sayHello(String str);
}
接口实现类
package com.example.dubbodemo.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.example.dubbodemo.service.TestService;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @auther 高松
 * @DATE 2019/9/5  0:14
 * dubbox-test
 */

@Service(interfaceClass = TestService.class)
@Component
public class TestServiceImpl implements TestService {

    @Override
    public String sayHello(String str) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        System.out.println(dateFormat.format(new Date()) + ": " + str);
        return dateFormat.format(new Date()) + ": " + str;
    }
}

需要注意的是这里的两个注解
@Service(interfaceClass = TestService.class)
import com.alibaba.dubbo.config.annotation.Service;
@Component**

客户端核心代码

配置文件



#应用名
dubbo.application.name=customer

#注册zookeeper的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫包
dubbo.annotation.package=com.example
#协议 (有 dubbo、rest、http、hessian、webservice)
dubbo.protocol.name=dubbo
#协议暴露服务的端口(Integer类型)
dubbo.protocol.port=20880

dubbox配置类

package com.example.config;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.spring.AnnotationBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @auther 高松
 * @DATE 2019/9/4  23:56
 * dubbox-test
 */

@Configuration
public class DubboConfig {

    @Bean
    @ConfigurationProperties(prefix="dubbo.application")
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        return applicationConfig;
    }

    @Bean
    @ConfigurationProperties(prefix="dubbo.registry")
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        return registryConfig;
    }
    @Bean
    @ConfigurationProperties(prefix="dubbo.annotation")
    public AnnotationBean annotationBean() {
        AnnotationBean annotationBean = new AnnotationBean();
        return annotationBean;
    }

    @Bean
    @ConfigurationProperties(prefix="dubbo.protocol")
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setName("rest");
        return protocolConfig;
    }
}

获取服务类

这个接口需要和服务端一模一样包括路径
public interface TestService {
   String sayHello(String str);
}
package com.example.dubboxclient;

import com.alibaba.dubbo.config.annotation.Reference;
import com.example.dubbodemo.service.TestService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @auther 高松
 * @DATE 2019/9/5  0:18
 * dubbox-test
 */

@RestController
@RequestMapping("/")
public class TestController {

    @Reference(interfaceClass = TestService.class)
    private TestService testService;

    @GetMapping("user")
    public String hello() {
        return testService.sayHello("Hello springboot and dubbo!");
    }
}

值得注意的是这个注解
@Reference(interfaceClass = TestService.class)
private TestService testService;

运行效果(前提需要运行本地zookeeper)

RPC远程调用及常用框架之dubbox_第5张图片

RPC远程调用及常用框架之dubbox_第6张图片

总结

之前的文章分别讲解了
RPC远程调用及常用框架之ICE
RPC远程调用及常用框架之Thrift
RPC远程调用及常用框架之Hessian
也算是对rpc调用的一些基础使用拓宽自己的知识面有兴趣的可以看看,实际运用也就是基于这些做接口提取形成一个产品体系,好了感谢大家!
这里再附上前几章的rpc调用代码供参考,支持下,点赞!
链接:https://pan.baidu.com/s/1uYjk28Xu_0u5yVjHA_Zt9A
提取码:uxpk

你可能感兴趣的:(RPC远程调用及常用框架之dubbox)