0
点赞
收藏
分享

微信扫一扫

SpringCloudAlibaba集成搭建Dubbo+Nacos

使用Dubbo作为SpringCloudAlibaba架构中RPC组件。
Dubbo官方文档:https://dubbo.apache.org/zh/
DubboGitHub:https://github.com/apache/dubbo
说明:官方文档中的接入nacos的说明已经很老了,试过之后发现各种jar冲突,所以直接看github上最新的说明就好了,很方便。

搭建Dubbo管理控制台

下载DubboAdmin代码
git clone https://github.com/apache/dubbo-admin.git
修改dubbo-admin-server下application.properties指定注册中心地址
# centers in dubbo2.7
#admin.registry.address=zookeeper://127.0.0.1:2181
#admin.config-center=zookeeper://127.0.0.1:2181
#admin.metadata-report.address=zookeeper://127.0.0.1:2181

server.port=8081

admin.registry.address=nacos://127.0.0.1:8848
admin.config-center=nacos://127.0.0.1:8848
admin.metadata-report.address=nacos://127.0.0.1:8848

admin.root.user.name=root
admin.root.user.password=root
启动DubboServer
mvn --projects dubbo-admin-server spring-boot:run
##或者
cd dubbo-admin-distribution/target
java -jar dubbo-admin-0.1.jar
##或者
cd dubbo-admin-distribution/src/bin
sh startup.sh
访问管理后台

项目集成

创建API项目

api项目提供公共的interface和dto;
这里注意dto类要实现Serializable,因为数据传出过程中需要序列化;

package com.qiejk.commonservices.service;

import com.qiejk.commonservices.dto.UserDto;

public interface IUserService {

    Long saveUser(UserDto userDto);

    UserDto getUser(Long id);
}
package com.qiejk.commonservices.dto;

import java.io.Serializable;

public class UserDto implements Serializable {

    private String name;
    private Integer age;
    private String birthday;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
}
创建Provider服务提供项目
pom 引入依赖
 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.10</version>
        </dependency>
        <!-- Keep latest Nacos client version -->
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.2.1</version>
        </dependency>

        <dependency>
            <groupId>com.qiejk</groupId>
            <artifactId>common-services</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
编写application.yml配置文件
server:
  port: 8091

spring:
  application:
    name: dubbo-provider
dubbo:
  application:
    name: dubbo-provider
  protocol:
    name: dubbo
    port: -1
  registry:
    protocol: nacos
    address: 127.0.0.1:8848
    group: dubbo ##group 一定要写,否则DubboAdmin无法发现服务
编写服务实现类

使用DubboService修饰实现类

package com.qiejk.dubboprovider.user.impl;

import com.qiejk.commonservices.dto.UserDto;
import com.qiejk.commonservices.service.IUserService;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService(version = "0.0.1")
public class UserServiceImpl implements IUserService {
    @Override
    public Long saveUser(UserDto userDto) {
        return 1L;
    }

    @Override
    public UserDto getUser(Long id) {
        UserDto dto = new UserDto();
        dto.setBirthday("20210630");
        dto.setName("小丸子");
        dto.setAge(1);
        return dto;
    }
}
编写项目启动类

使用EnableDubbo修饰类,即可自动被Dubbo发现

package com.qiejk.dubboprovider;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@EnableDubbo
@SpringBootApplication
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }

}
创建Consumer服务提供项目
pom 引入依赖
 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.10</version>
        </dependency>
        <!-- Keep latest Nacos client version  不要使用太高版本,否则会出现一些兼容问题-->
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.2.1</version>
        </dependency>

        <dependency>
            <groupId>com.qiejk</groupId>
            <artifactId>common-services</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
编写application.yml配置文件
server:
  port: 8091

spring:
  application:
    name: dubbo-provider
dubbo:
  application:
    name: dubbo-provider
  registry:
    protocol: nacos
    address: 127.0.0.1:8848
    group: dubbo ##group 一定要写,否则DubboAdmin无法发现服务
编写服务请求类

使用DubboReference注入service

package com.qiejk.dubboconsumer.controller;

import com.qiejk.commonservices.dto.UserDto;
import com.qiejk.commonservices.service.IUserService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @DubboReference(version = "0.0.1")
    private IUserService userService;

    @RequestMapping(value = "/userinfo")
    @ResponseBody
    public UserDto getUser(@RequestParam(value = "uid") Long userId){
        return userService.getUser(userId);
    }
}

编写项目启动类

使用EnableDubbo修饰类,即可自动被Dubbo发现

package com.qiejk.dubboconsumer;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubbo
@SpringBootApplication
public class DubboConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class, args);
    }

}

查看效果

分别启动provider和consumer

进入nacos后台可以看到


进入dubbo后台可以看到



测试服务


请求项目


举报

相关推荐

0 条评论