Dubbo服务发布调用实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nangeali/article/details/82107249

服务发布调用实现

系统需求
根据商品id,查询商品信息

Dao

单表查询,不需要写代码
使用Mybatis逆向工程生成的代码

Interface

在taotao-manager-interface工程中
创建一个ItemService接口

public interface ItemService {
    TbItem getItemById(long itemId);
}

Service

实现接口
要找到接口,需要添加对接口的引用

<dependency>
    <groupId>com.taotao</groupId>
    <artifactId>taotao-manager-interface</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

在taotao-manager-Service工程中
创建一个itemSeviceImpl的实现类

@Service
public class ItemServiceImpl implements ItemService {

    @Autowired
    private TbItemMapper itemMapper;

    @Override
    public TbItem getItemById(long itemId) {
        TbItem item = itemMapper.selectByPrimaryKey(itemId);
        return item;
    }
}

发布服务

使用Dubbo发布服务,引入jar包
父工程,控制版本号
Service,添加jar包引用

<!-- dubbo相关的jar包 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>spring</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
        <exclusion>
            <artifactId>netty</artifactId>
            <groupId>org.jboss.netty</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
</dependency>
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
</dependency>

注意

Maven依赖传递
引入Dubbo的时候,会把依赖的Spring版本也添加进来

排除Spring的引用,否则,可能会有版本冲突问题
同理,排除netty的引用
选中,右键Exclude Maven Artifact
这里写图片描述

引用标签

在配置文件中,使用dubbo标签
需要添加dubbo标签,dubbo约束

否则,使用dubbo标签,标签提示错误
applicationContext-service.xml

xmlns:dubbo=http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd

这里写图片描述

发布服务

<!-- 发布dubbo服务 -->
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="taotao-manager" />
<!-- 注册中心的地址 -->
<dubbo:registry protocol="zookeeper" address="192.168.25.167:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl" timeout="300"/>

配置说明

dubbo:application,配置应用程序,名称
dubbo:registry,配置注册中心,地址端口号,默认2181

dubbo:protocol,配置dubbo服务端口号,默认20880
这个端口号,可以改为其他端口号
只要不冲突,并且在65535范围内即可

dubbo:service,暴露服务接口
Interface,接口,配置接口的全路径名
Ref,引用接口实现,从容器中获取

itemServiceImpl
通过扫描包,扫描到具体的实现类
在容器中创建一个Bean,添加到Spring容器中
Id,默认为类名,首字母小写itemServiceImpl

<context:component-scan base-package="com.taotao.service"/>

Timeout,设置超时时间

服务调用

Web工程,添加dubbo引用

<!-- dubbo相关的jar包 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <exclusions>
        <exclusion>
            <artifactId>spring</artifactId>
            <groupId>org.springframework</groupId>
        </exclusion>
        <exclusion>
            <artifactId>netty</artifactId>
            <groupId>org.jboss.netty</groupId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
</dependency>
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
</dependency>

引用标签

需要在Spring容器中,引用服务
Spring MVC前端控制器,也会初始化一个Spring容器
所以,可以在Spring MVC里面直接引用服务

Springmvc.xml
同理,添加dubbo标签、约束

xmlns:dubbo=http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd

这里写图片描述

引用服务

<!-- 引用dubbo服务 -->
<dubbo:application name="taotao-manager-web"/>
<dubbo:registry protocol="zookeeper" address="192.168.25.167:2181"/>    
<dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />

配置说明

发布服务,需要在注册中心注册
引用服务,也需要在注册中心注册

dubbo:application,配置应用程序,程序名称
dubbo:registry,配置注册中心,地址端口号
dubbo:reference,引用服务

Interface

Web需要引用Interface接口
Pom文件,添加对接口的引用

<dependency>
    <groupId>com.taotao</groupId>
    <artifactId>taotao-manager-interface</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

接口
需要单独提出了,存放接口的定义

服务端,发布服务,需要这个接口定义
表现层,引用服务,也需要这个接口定义
所以,把接口打成一个jar包,方便表现层的引用

虽然,Interface是工程的一个模块
但是,只要是一个jar包有坐标,就可以通过坐标引用

此时,Spring MVC容器中
就有这个Interface的代理对象,通过id给Bean起个名字
容器中,就有这个Bean对象

Controller

通过注解,注入这个对象
在Spring MVC容器初始化的时候
会把这个Bean注入到Controller中,直接调用即可

@Controller
public class ItemController {

    @Autowired
    private ItemService itemService;

    @RequestMapping("/item/{itemId}")
    @ResponseBody
    public TbItem getItemById(@PathVariable Long itemId) {
        TbItem tbItem = itemService.getItemById(itemId);
        return tbItem;
    }
}

猜你喜欢

转载自blog.csdn.net/nangeali/article/details/82107249