Spring Cloud 调用 Dubbo接口

 前言

项目重构使用springCloud项目,因为有其他服务提供的dubbo接口之前都是mvc项目xml文件配置不太好,所以需要调研一下springCloud调用dubbo接口,提供者都是已上线项目所以本文根据自身需求所做,废话不多说看下面。

消费者

pom文件

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.3</version>
        </dependency>

<dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
            <version>2.12.0</version>
        </dependency>
<dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


        <dependency>
            <groupId>com.zxq.iov.cloud.sp</groupId>
            <artifactId>sp-is-interface</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>

配置文件

#application.dubbo-properties   consumer
dubbo.application.name=knowledge-consumer
dubbo.application.organization=zxq
dubbo.application.owner=cloud
dubbo.registry.address.protocol=zookeeper
dubbo.registry.address=10.25.239.99:2181
dubbo.registry.group=pp
dubbo.registry.id=zookeeper_registry
dubbo.registry.protocol=zookeeper
dubbo.registry.client=zkclient
dubbo.consumer.timeout=3000
dubbo.monitor.protocol=registry
dubbo.protocol.name=dubbo
dubbo.protocol.port=29988
dubbo.protocol.server=netty
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@EnableDubbo(scanBasePackages = "com.saicmotor.toc.knowledge")
@PropertySource("classpath:/application.dubbo-properties")
@ComponentScan(value = {"com.saicmotor.toc.knowledge"})
public class consumerConfiguration {


}

实现类

import com.alibaba.dubbo.config.annotation.Reference;
import com.saicmotor.toc.knowledge.service.CustomerService;
import com.zxq.iov.cloud.sp.is.api.CcmInfoApi;
import com.zxq.iov.cloud.sp.is.api.IUserApi;
import com.zxq.iov.cloud.sp.is.api.dto.ResponseResult;
import org.springframework.stereotype.Service;

@Service
public class CustomerServiceImpl implements CustomerService {

    @Reference(version = "1.0.0")
    private CcmInfoApi ccmInfoApi;

    @Reference(version = "1.0")
    private IUserApi userApi;

启动类要加@EnableDubbo注意包(alibaba.dubbo)

注意

注解需要用alibaba.dubbo下的注解,因为现有提供者都是注册在zk上的所以我这也得用zk然后遇到很多坑,一开始注册不到zk上注意依赖和配置,在之后就是@Reference注入为空,发现提供者有version我这边没加所以为空,这个需要注意,提供者没有可以不加。

提供者

成功之后我也自己写了一个提供者去测试,新建了一个api接口模块,一个provide模块,不多说直接上代码

api接口模块

public interface ProviderService {

    ShortDto findById(Long id);

}

这里只有简单的一个接口需要provide模块实现类去实现

pom文件

<dependency>
            <groupId>com.saicmotor.toc</groupId>
            <artifactId>knowledge-dubbo-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

提供者和消费者都需要加这个api接口模块依赖,其余依赖同上

配置

dubbo.application.name=knowledge-provider
dubbo.application.organization=zxq
dubbo.application.owner=cloud
dubbo.registry.address=10.25.239.99:2181
dubbo.registry.address.protocol=zookeeper
dubbo.registry.group=pp
dubbo.registry.id=zookeeper_registry
dubbo.registry.protocol=zookeeper
dubbo.registry.client=zkclient
dubbo.monitor.protocol=registry
dubbo.protocol.name=dubbo
dubbo.protocol.port=29989
dubbo.protocol.server=netty
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration
@EnableDubbo(scanBasePackages = "com.saicmotor.toc.knowledge")
@PropertySource("classpath:/application.dubbo-properties")
@ComponentScan(value = {"com.saicmotor.toc.knowledge"})
public class ProviderConfiguration {
}

实现类

import com.alibaba.dubbo.config.annotation.Service;
import com.saicmotor.toc.knowledge.dto.ShortDto;
import com.saicmotor.toc.knowledge.service.ProviderService;

@Service(version = "1.0")
public class ProviderServiceImpl implements ProviderService {


    @Override
    public ShortDto findById(Long id) {
        System.out.println("yes");
        ShortDto shortDto = new ShortDto();
        shortDto.setCode("aaa");
        return shortDto;
    }

这里注意@Service要用alibaba.dubbo下的,并且我这边也加了version,消费者注入也需要加version。

启动类要加@EnableDubbo注意包(alibaba.dubbo)

注意

返回如果是实体需要实现 Serializable 序列化

希望能帮助需要的各位。附带一个dubbo官方文档

注解配置 | Apache Dubbohttps://dubbo.apache.org/zh/docsv2.7/user/configuration/annotation/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值