以前写过一篇搭建Dubbo环境,当时是直接调用api的。这次写一篇和SpringBoot集成的。

背景

接手了一个项目,使用到了SpringBoot+Dubbo,就自己整理出一个最小版的环境。

版本

java: 8
SpringBoot: 2.2.10.RELEASE
Dubbo: 2.7.8
Nacos: 使用docker,nacos/nacos-server:2.0.2

部分代码说明

先启动Nacos服务

docker-compose up -d即可。

version: "3"

services:
  nacos:
    image: nacos/nacos-server:2.0.2
    container_name: nacos
    restart: always
    ports:
      - 8848:8848 
      - 9848:9848
      - 9849:9849
    environment:
      - TZ=Asia/Shanghai
      - LANG=en_US.utf8
      - MODE=standalone

假设 nacos 服务所在机器 ip 为192.168.18.55,则nacos访问地址是 http://192.168.18.55:8848/nacos,账号密码都是nacos。

创建服务提供者并提供Dubbo接口

Dubbo接口

package cn.valuetodays.common.service;

/**
 * .
 *
 * @author lei.liu
 * @since 2025-06-03
 */
public interface HelloService {
    String hi(String name);
}

服务提供者,注意使用了@DubboService注解

package com.valuetodays.provider;

import cn.valuetodays.common.service.DubboServiceConstant;
import cn.valuetodays.common.service.HelloService;
import org.apache.dubbo.config.annotation.DubboService;

/**
 * .
 *
 * @author lei.liu
 * @since 2025-06-03
 */
@DubboService(group = DubboServiceConstant.API_PROVIDER_GROUP, version = "1.0.0", timeout = 30000)
public class HelloServiceImpl implements HelloService {
    @Override
    public String hi(String name) {
        return "hi, " + name;
    }
}

创建服务消费者,注意使用了DubboReference注解

package cn.valuetodays.consumer;

import cn.valuetodays.common.service.DubboServiceConstant;
import cn.valuetodays.common.service.HelloService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * .
 *
 * @author lei.liu
 * @since 2025-06-03
 */
@RestController
public class IndexController {
    @DubboReference(group = DubboServiceConstant.API_PROVIDER_GROUP, version = "1.0.0", timeout = 30000, retries = 3)
    private HelloService helloService;

    @RequestMapping("")
    public String hi(String name) {
        return helloService.hi(name);
    }
}

调用

之前已经启动nacos服务了。
此时先启动provider
再启动consumer,会看到打印了hi,aaa

curl http://localhost:60001?name=billy可以看到调用成功了。

注意事项

provider和consumer都要配置dubbo和nacos。见各自的application.yml。

附件

源码见:
https://valuetodays.github.io/statics/images/eblog/202506/springboot2-dubbo/springboot2-dubbo.zip