Dubbo 3.0.6 + Nacos 2.0.4 配置
1. 引入配置文件
    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
        <maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
        <!-- 外部依赖版本 -->
        <spring-cloud.version>2021.0.1</spring-cloud.version>
        <spring-boot.version>2.6.4</spring-boot.version>
        <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
        <dubbo.version>3.0.6</dubbo.version>
        <nacos-client.version>2.0.4</nacos-client.version>
        <commons-io.version>2.11.0</commons-io.version>
        <commons-collections4.version>4.4</commons-collections4.version>
        <lombok.version>1.18.22</lombok.version>
        <mapstruct.version>1.4.2.Final</mapstruct.version>
        <druid.version>1.2.8</druid.version>
        <mybatis-spring-boot.version>2.2.2</mybatis-spring-boot.version>
    </properties>
    <dependencyManagement>
        <dependencies>
        <!-- SpringBoot 依赖配置 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-registry-nacos</artifactId>
                <version>${dubbo.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.dubbo</groupId>
                        <artifactId>dubbo-common</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.apache.dubbo</groupId>
                        <artifactId>dubbo-remoting-api</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>log4j</groupId>
                        <artifactId>log4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>${nacos-client.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
 
2. 生产者
2.1 添加配置
server:
  port: 9090
spring:
  application:
    name: aiops-menu
dubbo:
  registry:
    address: nacos://127.0.0.1:8848
logging:
  level:
    root: info
 
2.2 生产者接口与实现类
public interface MenuApi {
    public BaseResponse<List<MenuResp>> queryList(MenuReq menuReq);
}
 
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
@Slf4j
@DubboService
public class MenuService implements MenuApi {
    @Override
    public BaseResponse<List<MenuResp>> queryList(MenuReq menuReq) {
        List<MenuResp> menuList = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
             menuList.add(new MenuResp(i, menuReq.getName() + "name"+i));
        }
        log.info("查询菜单:{}", menuList);
        return BaseResponse.success(menuList);
    }
}
 
2.3 修改启动类
@EnableDubbo
@SpringBootApplication
public class MenuApplication {
    public static void main(String[] args) {
        SpringApplication.run(MenuApplication.class, args);
    }
}
 
注意:如果不添加@EnableDubbo注解,那么dubbo不会自动注册接口!!!
3. 消费者
3.1 配置文件
server:
  port: 9091
spring:
  application:
    name: gfkj-aiops-role
dubbo:
  registry:
    address: nacos://127.0.0.1:8848
  protocol:
    # 默认端口是 20882,本地启动多个会冲突
    port: 20881
 
3.2 消费代码
@Slf4j
@DubboService
public class RoleService implements RoleApi {
    @Resource
    private MenuApi menuApi;
    @Override
    public BaseResponse<RoleResp> queryRole(RoleReq roleReq) {
        log.info("查询角色:{}", roleReq);
        RoleResp roleResp = new RoleResp(1, "role");
        BaseResponse<List<MenuResp>> menuResponse = menuApi.queryList(new MenuReq("menu"));
        log.info("查询菜单:{}", menuResponse);
        return BaseResponse.success(roleResp);
    }
}
/*
--------dubbo注入类--------
 */
@Configuration
public class DubboConfiguration {
    @Bean
    @DubboReference(interfaceClass = MenuApi.class)
    public ReferenceBean<MenuApi> helloService() {
        return new ReferenceBean<>();
    }
}
 
启动类:
@EnableDubbo
@SpringBootApplication
public class RoleApplication {
    public static void main(String[] args) {
        SpringApplication.run(RoleApplication.class, args);
    }
}
 
消费者配置:
<!-- 继承至上面 公共pom文件 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>
    </dependencies>
 
问题:
1. 启动日志报错
log4j:WARN No appenders could be found for logger (org.apache.dubbo.common.Version).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
 
解决方法:
<!-- dubbo-registry-nacos 排除 -->
<exclusion>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
</exclusion>
 
2. 重复类
2022-03-18 01:23:36.497 ERROR 39094 --- [           main] org.apache.dubbo.common.Version          :  [DUBBO] Duplicate class org/apache/dubbo/remoting/exchange/Exchangers.class in 2 jar [file:/Users/liujunguang1/.m2/repository/org/apache/dubbo/dubbo-remoting-api/3.0.6/dubbo-remoting-api-3.0.6.jar!/org/apache/dubbo/remoting/exchange/Exchangers.class, file:/Users/liujunguang1/.m2/repository/org/apache/dubbo/dubbo/3.0.6/dubbo-3.0.6.jar!/org/apache/dubbo/remoting/exchange/Exchangers.class], dubbo version: 3.0.6, current host: 192.168.3.57
2022-03-18 01:23:36.502 ERROR 39094 --- [           main] org.apache.dubbo.common.Version          :  [DUBBO] Duplicate class org/apache/dubbo/remoting/Transporters.class in 2 jar [file:/Users/liujunguang1/.m2/repository/org/apache/dubbo/dubbo-remoting-api/3.0.6/dubbo-remoting-api-3.0.6.jar!/org/apache/dubbo/remoting/Transporters.class, file:/Users/liujunguang1/.m2/repository/org/apache/dubbo/dubbo/3.0.6/dubbo-3.0.6.jar!/org/apache/dubbo/remoting/Transporters.class], dubbo version: 3.0.6, current host: 192.168.3.57
2022-03-18 01:23:36.503 ERROR 39094 --- [           main] org.apache.dubbo.common.Version          :  [DUBBO] Duplicate class org/apache/dubbo/remoting/RemotingException.class in 2 jar [file:/Users/liujunguang1/.m2/repository/org/apache/dubbo/dubbo/3.0.6/dubbo-3.0.6.jar!/org/apache/dubbo/remoting/RemotingException.class, file:/Users/liujunguang1/.m2/repository/org/apache/dubbo/dubbo-remoting-api/3.0.6/dubbo-remoting-api-3.0.6.jar!/org/apache/dubbo/remoting/RemotingException.class], dubbo version: 3.0.6, current host: 192.168.3.57
 
解决方法:
<!-- dubbo-registry-nacos 排除 -->
    <exclusion>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-common</artifactId>
    </exclusion>
    <exclusion>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-remoting-api</artifactId>
    </exclusion>
 
3. 启动报错
java.lang.NoSuchMethodError: com.alibaba.nacos.api.config.ConfigService.publishConfigCas(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
	
***************************
APPLICATION FAILED TO START
***************************
Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location:
    org.apache.dubbo.metadata.store.nacos.NacosConfigServiceWrapper.publishConfigCas(NacosConfigServiceWrapper.java:65)
The following method did not exist:
    com.alibaba.nacos.api.config.ConfigService.publishConfigCas(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z
The calling method's class, org.apache.dubbo.metadata.store.nacos.NacosConfigServiceWrapper, was loaded from the following location:
    jar:file:/Users/liujunguang1/.m2/repository/org/apache/dubbo/dubbo/3.0.6/dubbo-3.0.6.jar!/org/apache/dubbo/metadata/store/nacos/NacosConfigServiceWrapper.class
The called method's class, com.alibaba.nacos.api.config.ConfigService, is available from the following locations:
    jar:file:/Users/liujunguang1/.m2/repository/com/alibaba/nacos/nacos-api/1.4.2/nacos-api-1.4.2.jar!/com/alibaba/nacos/api/config/ConfigService.class
The called method's class hierarchy was loaded from the following locations:
    com.alibaba.nacos.api.config.ConfigService: file:/Users/liujunguang1/.m2/repository/com/alibaba/nacos/nacos-api/1.4.2/nacos-api-1.4.2.jar
Action:
Correct the classpath of your application so that it contains compatible versions of the classes org.apache.dubbo.metadata.store.nacos.NacosConfigServiceWrapper and com.alibaba.nacos.api.config.ConfigService
 
解决方法:
 升级nacos-client版本
   <nacos-client.version>2.0.4</nacos-client.version>
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
        <version>${nacos-client.version}</version>
    </dependency>










