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();
}
}
标签:dubbo,service,pinyougou,流程,BrandService,import,com,annotation,品优购 来源: https://blog.csdn.net/qq_45850872/article/details/106763936