栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

一个简单的Dubbo工程样例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一个简单的Dubbo工程样例

目录

1.背景

2.环境

3.步骤

1)架构

2)安装注册中心

3)父工程的pom.xml

4)Common工程

5)Provider工程

6)Consumer工程

4.遇到的问题

5.参考资料


1.背景

一直想了解一下Dubbo的应用是怎样的,所以尝试着写了一个简单的Dubbo应用样例。刚起步,一切都还需学习~~

2.环境

Springboot

2.1.2.RELEASE
Dubbo2.7.3
Zookeeper3.6.3

3.步骤

1)架构

是的,没错,就是官网抄过来的图~~ 从这图上可以看出来,搭建一个Dubbo工程,至少需要Registry(注册中心),ProviderConsumer。Monitor不安装也是可以使用的。这里不是本文重点,所以就不写了,可以自行度娘。

2)安装注册中心

这里使用Zookeeper作为注册中心。官网下载地址:Index of /zookeeper/zookeeper-3.6.3

为什么不用其他的类似Nacos、Consul?完全是跟着官网的快速开始来的,换别的也类似。

zookeeper的安装可以参考:ZooKeeper的安装与部署 - jimcsharp - 博客园

3)父工程的pom.xml

子工程需要的依赖就自行加入了,这里就不再copy重复的配置了

    
        UTF-8
        1.8
        4.12
        1.16.18
        5.1.47
        1.3.0
        2.7.3
        2.1.2.RELEASE
        1.8
        1.8
    

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                ${spring-boot.version}
                pom
                import
            
            
                org.springframework.boot
                spring-boot-starter-parent
                ${spring-boot.version}
            
            
                org.apache.dubbo
                dubbo-spring-boot-starter
                ${dubbo.version}
            
            
                org.apache.dubbo
                dubbo-dependencies-zookeeper
                ${dubbo.version}
            
            
            
                org.mybatis.spring.boot
                mybatis-spring-boot-starter
                ${mybatis.spring.boot.version}
            
            
            
                mysql
                mysql-connector-java
                ${mysql.version}
            
            
            
                org.projectlombok
                lombok
                ${lombok.version}
                true
            
            
                junit
                junit
                ${junit.version}
            
        
    


    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.1
                
                    ${java.version}
                    ${java.version}
                
            
            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.19.1
                
                    true    
                
            
        
    

4)Common工程

这是将Provider和Consumer共用的部分抽取出来,单独创建一个工程。在这里绕了很久,一开始没有理解到,总是代入SpringCloud的Feign概念,然后发现自己错得离谱。

A.entity

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProviderEntity implements Serializable {
    private Integer id;
    private String userAddress;
    private String userId;
    private String consignee;
    private String phoneNum;
    private Short isDefault;
}

B.service

public interface ProviderService {
    List getProviderEntityList();
}

5)Provider工程

**** 启动类上加@EnableDubbo

A.application.yml

server:
  port: 10001

spring:
  application:
    name: provider-service
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/dubbo?serverTimezone=GMT%2B8&characterEncoding=utf8
    username: root
    password: 123456

dubbo:
  registry:
    address: zookeeper://192.168.16.8:2181
  metadata-report:
    address: zookeeper://192.168.16.8:2181
  scan:
    base-packages: com.dubbo

mybatis:
  mapper-locations: classpath:mapper/*.xml

B. controller

@RestController
@RequestMapping(value = "/provider/")
public class ProviderController {

    @Resource
    ProviderService providerService;

    @GetMapping("list")
    public List getProviderEntityList(){
        return providerService.getProviderEntityList();
    }
}

C. service.impl

import org.apache.dubbo.config.annotation.Service;

@Service(version = "1.0.0")  // 注意:这里使用的是dubbo的注解
public class ProviderServiceImpl implements ProviderService {

    @Resource
    ProviderDao providerDao;

    @Override
    public List getProviderEntityList() {
        return providerDao.getProviderEntityList();
    }
}

D. dao

@Mapper
public interface ProviderDao {
    List getProviderEntityList();
}

E. mapper.xml

该文件的路径resources->mapper->ProviderMapper.xml




    
        
        
        
        
        
        
    

    
        select * from t_provider
    

6)Consumer工程

**** 启动类上加@EnableDubbo

A. application.yml

server:
  port: 10002

spring:
  application:
    name: consumer-service

dubbo:
  registries:
    a1:
      register: true
      address: zookeeper://192.168.16.8:2181
    a2:
      register: true
      address: zookeeper://192.168.16.8:2181
  metadata-report:
    a1:
      address: zookeeper://192.168.16.8:2181
    a2:
      address: zookeeper://192.168.16.8:2181
  scan:
    base-packages: com.dubbo

B. dubbo-consumer.xml


    
    

C. controller

@RestController
@RequestMapping(value = "/consumer/")
public class ConsumerController {

    @Resource
    ConsumerService consumerService;

    @GetMapping("/provider/list")
    public List getProviderEntityList() {
        return consumerService.getProviderEntityList();
    }
}

D. service

public interface ConsumerService {
    List getProviderEntityList();
}

E. service.impl

import org.springframework.stereotype.Service;

@Service  // 注意这里是springboot的注解
public class ConsumerServiceImpl implements ConsumerService{

    @Reference(version = "1.0.0", registry = {"a1", "a2"})
    ProviderService providerService;


    @Override
    public List getProviderEntityList() {
        return providerService.getProviderEntityList();
    }
}

4.遇到的问题

1)@Service的区别。哪个服务对外暴露service那么哪个服务就是Provider,所使用的就是dubbo中的@Service注解

2)common工程需要在provider和consumer工程的pom.xml中都引入

        
            com.cloud
            common
            1.0-SNAPSHOT
        

3)序列化。在common重点ProviderEntity需要做序列化处理。

5.参考资料

文档 | Apache Dubbo  -- 官网

Dubbo监控中心 - SpringCore - 博客园

SpringBoot整合Dubbo遇到的几个坑_LrvingTc的博客-CSDN博客

Dubbo与SpringBoot结合_博客-CSDN博客_dubbo和springboot的关系

Dubbo整合SpringBoot - 雪山上的蒲公英 - 博客园 

【zookeeper+Dubbo】Dubbo与SpringBoot整合的三种方式_蜂蜜柚子茶-CSDN博客

dubbo学习(二)配置dubbo XML方式配置 - 有梦想的肥宅 - 博客园

Dubbo学习笔记-Zookeeper连接失败 - 寒烟濡雨 - 博客园 

 

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

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

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