使用openFeign以http为协议进行rest调用。而dubbo是tcp+port,使用tcp协议的。

版本说明

dubbo : 2.7.8
spring-cloud-alibaba: 2.1.4.RELEASE
spring-cloud: Greenwich.SR6
spring-boot: 2.1.13.RELEASE

dubbo接口

对于服务提供者来说,是需要实现的接口,要暴露的接口。
对于消费者来说,直接调用下面的即可就可。

package top.lng.service;

public interface ProviderService {
    Object getData();
}

服务提供者

spring:
  application:
    name: spring-cloud-dubbo-provider-demo
  main:
    # Spring Boot2.1及更高的版本需要设定
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      # Nacos 服务发现与注册配置
      discovery:
        server-addr: localhost:8848

dubbo:
  registry:
      #挂载到 Spring Cloud 注册中心  高版本可选
    address: spring-cloud://localhost:8848

  protocol:
    name: dubbo
    port: 999
  
  ## 服务提供者不需要订阅其它服务..
  cloud:
    subscribed-services: ''
  scan:
    base-packages: 'top.lng.service.impl'

## https://nacos.io/zh-cn/docs/use-nacos-with-dubbo.html


server:
  port: 9999

业务实现

package top.lng.service.impl;

import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;
import top.lng.entity.User;
import top.lng.service.ProviderService;

/**
 * @author echo lovely
 * @date 2021/7/26 14:53
 * @description 通过dubbo暴露服务
 */

@Service
@DubboService(version = "0.0.1") // provider, 可指定版本, 分组,可以在配置文件,使用el表达式读取,还可放到nacos配置中心。
public class ProviderServiceImpl implements ProviderService {
    @Override
    public Object getData() {

        User user = new User();
        user.setName("jack");
        user.setAge(19);

        return user;
    }
}

扫描dubbo接口在启动类上., 也可在配置文件配置dubbo的包路径。

@EnableDubbo(scanBasePackages = {"top.lng.service"})

消费者,要订阅对应的服务,订阅提供者

spring:
  application:
    name: spring-cloud-dubbo-consumer-demo
  main:
    # Spring Boot2.1及更高的版本需要设定
    allow-bean-definition-overriding: true
  cloud:
    nacos:
      # Nacos 服务发现与注册配置
      discovery:
        server-addr: localhost:8848
server:
  port: 8888

dubbo:
  registry:
      address: spring-cloud://localhost:8848
  protocol:
    name: dubbo
    port: 1000
  cloud:
    # 可指明多个微服务提供者 逗号隔开
    subscribed-services: 'spring-cloud-dubbo-provider-demo'



# https://zhuanlan.zhihu.com/p/378683063
# 目前问题 只能通过链接直连dubbo应用, 需要注册中心来做..

# https://hub.fastgit.org/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/README_CN.md



调用

@RestController
public class ConsumerController {
    // 对应的提供者指明了版本,这里就要写
    @DubboReference(version = "0.0.1")
    private ProviderService providerService;

    @GetMapping("/consumer/restObj")
    public Object restObj() {

        return this.providerService.getData();
    }
}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐