0
点赞
收藏
分享

微信扫一扫

Dubbo 3.0.6 + Nacos 2.0.4 配置 + spring boot 2.6.4

whiteMu 2022-03-18 阅读 271

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>

举报

相关推荐

0 条评论