dubbo服务是典型的RPC服务调用方式,即所谓的远程调用。
dubbo服务涉及三要素:
即服务提供者和服务消费者都要遵守的协议规则,里面规定了该服务都有哪些接口。一般都是直接定义接口名和接口内的方法名,然后打成依赖包注册到版本库中。服务的提供者和服务的消费者都要引用该协议的依赖。 **具体写法:** 直接新建一个maven项目,项目中直接定义service,不必具体实现。该maven项目中也可放入服务提供者和消费者都要用到的实体类。编写完毕后直接打包注册到setting.xml文件配置的版本库中(一般公司都是自己搭建的私服)。二、服务提供者
服务提供者需要实现该协议中规定的接口,重写该协议中未实现的接口方法。 **具体写法:** 1.引入dubbo和springboot整合的依赖
io.dubbo.springboot spring-boot-starter-dubbo1.0.0
2.引入协议依赖,实现协议中的接口。*一定要注意该实现类要加上com.alibaba.dubbo.config.annotation.Service;包的@Service注解。*
package com.sunlibin.weatherprovider.service; import com.alibaba.dubbo.config.annotation.Service; import com.sunlibin.bean.District; import com.sunlibin.service.RpcDistrictService; import com.sunlibin.weatherprovider.mapper.DistrictMapper; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; @Transactional @Service(interfaceClass = com.sunlibin.service.RpcDistrictService.class) //service注解为alibaba的service注解,指明实现的远程接口是哪个 public class DistrictService implements RpcDistrictService { @Resource private DistrictMapper districtMapper; @Override public ListgetAllDistrict() { return this.districtMapper.getAllDistrict(); } @Override public District getDistrictById(Integer id) { return this.districtMapper.getDistrictById(id); } }
3.application.properties文件中配置dubbo的注册地址和注册名称
#配置dubbo #dubbo提供者的别名,只是个标识 spring.dubbo.application.name=spring-boot-starter-dubbo-demo-provider #zk地址(dubbo的注册地址) spring.dubbo.registry.address=zookeeper://localhost:2181 #dubbo协议 spirng.dubbo.protocol.name=dubbo #duboo端口号 spring.dubbo.protocol.port=20880 #这是你要发布到dubbo的接口所在包位置 spring.dubbo.scan=com.sunlibin.weatherprovider
配置完毕后随着此项目的启动,此提供者也就开始提供协议中规定的服务了。
三、服务消费者服务消费者需要直接引用该协议中的接口,然后调用该协议中规定的接口方法。通过dubbo的映射机制就会调用到服务提供者所提供的接口方法具体实现。 **具体写法:** 1.引入协议依赖和dubbo与springboot整合的依赖
io.dubbo.springboot spring-boot-starter-dubbo1.0.0
2.在application.properties文件配置dubbo
#该服务名称在dubbo中的别称 spring.dubbo.application.name=spring-boot-starter-dubbo-demo-consumer #zk地址 spring.dubbo.registry.address=zookeeper://localhost:2181 #dubbo协议 spring.dubbo.protocal.name=dubbo #duboo端口号 spring.dubbo.protocol.port=20880 #这是要扫描使用的dubbo接口所在包位置 spring.dubbo.scan=com.sunlibin.weathercustomer
3.直接在serviceImpl层通过com.alibaba.dubbo.config.annotation.Reference;包@Reference注解直接使用协议中规定的服务。
package com.sunlibin.weathercustomer.service.impl; import com.alibaba.dubbo.config.annotation.Reference; import com.sunlibin.bean.District; import com.sunlibin.service.RpcDistrictService; import com.sunlibin.weathercustomer.service.DistrictService; import org.springframework.stereotype.Service; import java.util.List; @Service("districtService") public class DistrictServiceImpl implements DistrictService { @Reference private RpcDistrictService rpcDistrictService; @Override public ListgetAllDistrict() { return this.rpcDistrictService.getAllDistrict(); } @Override public District getDistrictById(Integer id) { return this.rpcDistrictService.getDistrictById(id); } }
如此待项目启动后,会自动调用zk中注册的相关服务提供者。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)