微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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();
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐