Dubbo服务发布调用实现
服务发布调用实现
系统需求
根据商品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;
}
}
还没有评论,来说两句吧...