dubbo工作流程品优购整体流程

整体架构:

在这里插入图片描述

dubbo服务提供者

dubbo服务提供者加入配置,此时com.pinyougou.sellergoods.service.impl下所有的接口(类中有@service注解配置的接口)全部加入spring容器中暴露服务,这样web层就可以远程调用

原本是这样暴露服务,但只有只能暴露一个,所以改为下面扫描的方式暴露全部
原本

<!-- ############## 配置dubbo服务提供者 ############## -->
    <!-- 配置当前应用的名称 -->
    <dubbo:application name="pinyougou-sellergoods-service"/>
    <!-- 配置zookeeper作为注册中心,注册服务地址 -->
    <dubbo:registry protocol="zookeeper" address="192.168.12.131:2181"/>
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!-- 配置需要暴露服务 -->
    <dubbo:service interface="com.pinyougou.service.BrandService" ref="brandService">
    <bean id="brandService" class="com.pinyougou.sellergoods.impl.BrandServiceImpl">

改为:

<!-- ############## 配置dubbo服务提供者 ############## -->
    <!-- 配置当前应用的名称 -->
    <dubbo:application name="pinyougou-sellergoods-service"/>
    <!-- 配置zookeeper作为注册中心,注册服务地址 -->
    <dubbo:registry protocol="zookeeper" address="192.168.12.131:2181"/>
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!-- 配置采用包扫描来暴露服务 -->
    <dubbo:annotation package="com.pinyougou.sellergoods.service.impl"/>

实现类原来是:

package com.pinyougou.sellergoods.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.pinyougou.mapper.BrandMapper;
import com.pinyougou.pojo.Brand;
import com.pinyougou.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;

public class BrandServiceImpl implements BrandService {
    /** 注入数据访问接口代理对象 
    	关于这个类怎么加入到容器中,Mapper类中有配置文件将他们加入到容器中的
    */
    @Autowired
    private BrandMapper brandMapper;
    @Override
    public List<Brand> findAll() {
        return brandMapper.findAll();
    }
}

改为服务实现类中加入dubbo注解
也就是加入@Service注解并指定接口

package com.pinyougou.sellergoods.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.pinyougou.mapper.BrandMapper;
import com.pinyougou.pojo.Brand;
import com.pinyougou.service.BrandService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
// BrandService
@Service(interfaceName="com.pinyougou.service.BrandService")
@Transactional
public class BrandServiceImpl implements BrandService {
    /** 注入数据访问接口代理对象 
    	关于这个类怎么加入到容器中,Mapper类中有配置文件将他们加入到容器中的
    */
    @Autowired
    private BrandMapper brandMapper;
    @Override
    public List<Brand> findAll() {
        return brandMapper.findAll();
    }
}

dubbo服务消费者

原来的配置

<!-- ############## 配置dubbo服务消费者 ############## -->
    <!-- 配置当前应用的名称 -->
    <dubbo:application name="pinyougou-manager-web"/>
    <!-- 配置zookeeper作为注册中心,注册服务地址 -->
    <dubbo:registry protocol="zookeeper" address="192.168.12.131:2181"/>
    <!-- 配置引用服务,产生服务接口代理对象 -->
    <dubbo:reference id="brandService" interface="com.pinyougou.sercice.BrandService"/>

前面的配置和提供者的配置是差不多的,后面是通过扫描,
采用包扫描来引用服务,产生服务接口的代理对象,所以在实现类中是使用@Reference注解的方式,通过这个注解引用服务

<!-- ############## 配置dubbo服务消费者 ############## -->
    <!-- 配置当前应用的名称 -->
    <dubbo:application name="pinyougou-manager-web"/>
    <!-- 配置zookeeper作为注册中心,注册服务地址 -->
    <dubbo:registry protocol="zookeeper" address="192.168.12.131:2181"/>
    <!-- 配置采用包扫描来引用服务,产生服务接口的代理对象 -->
    <dubbo:annotation package="com.pinyougou.manager.controller"/>

控制类:

package com.pinyougou.manager.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.pinyougou.pojo.Brand;
import com.pinyougou.service.BrandService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class BrandController {
    /**
     * 引用服务接口代理对象
     * timeout: 调用服务接口方法超时时间毫秒数
     */
    @Reference(timeout = 10000)
    private BrandService brandService;
    /** 查询全部品牌 */
    @GetMapping("/brand/findAll")
    public List<Brand> findAll(){
        return brandService.findAll();
    }
}

相关文章

在网络请求时,总会有各种异常情况出现,我们需要提前处理这...
作者:宇曾背景软件技术的发展历史,从单体的应用,逐渐演进...
hello,大家好呀,我是小楼。最近一个技术群有同学at我,问我...
 一个软件开发人员,工作到了一定的年限(一般是3、4年左右...
当一个服务调用另一个远程服务出现错误时的外观Dubbo提供了多...
最近在看阿里开源RPC框架Dubbo的源码,顺带梳理了一下其中用...