一个简单的Dubbo工程样例

一个简单的Dubbo工程样例,第1张

一个简单的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.RELEASEDubbo2.7.3Zookeeper3.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连接失败 - 寒烟濡雨 - 博客园 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5718136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存