定制跟模板网站有什么不一样自媒体十大平台
我们在spring中使用dubbox相当简单,只需要配置一下即可
1. dubbox的配置
1.1 提供方
所谓的提供方,在我们的开发中一般指的是服务层
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 访问Dubbox所要占用的端口(自己要占用的端口) 该配置这里不可以省略,否则后面会出现端口占用的情况--><dubbo:protocol name="dubbo" port="20884"></dubbo:protocol><dubbo:application name="search-service"/> <!-- 这里的端口是服务端提供的端口号,是服务器上注册中心提供的端口 --><dubbo:registry address="zookeeper://192.168.25.130:2181"/><dubbo:annotation package="com.search.service.impl" /> </beans>
1.2 消费方
所谓的消费方,在我们开发中一般指的是web层,也就是调用方
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><context:property-placeholder location="classpath:config/application.properties" /><mvc:annotation-driven><mvc:message-converters register-defaults="true"><bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes" value="application/json"/><property name="features"><array><value>WriteMapNullValue</value><value>WriteDateUseDateFormat</value></array></property></bean></mvc:message-converters> </mvc:annotation-driven><!-- 引用dubbo 服务 --><dubbo:application name="search-web" /><dubbo:registry address="zookeeper://192.168.25.130:2181"/><dubbo:annotation package="com.search.controller" /> </beans>
注意:服务方与消费方的注册中心地址要一致
2. dubbox的开发
在提供方,不需要做额外的操作,我们关心的是在消费方也就是web层的调用方怎么能访问到注册中心的服务,用dubbox提供的注解@Reference就可以。
例如;
@RestController
@RequestMapping("/itemsearch")
public class ItemSearchController {@Referenceprivate ItemSearchService itemSearchService;@RequestMapping("/search")public Map<String, Object> search(@RequestBody Map searchMap ){return itemSearchService.search(searchMap);}}
通过@Reference注解可以实现远程注入,在web层我们就可以调用该接口的方法了。
3. dubbox的超时配置
我们在进行dubbox的开发的时候,经常会遇到dubbox的timeout的错误,这个错误的原因是dubbox默认连接时间是1秒钟,当我们的连接时间超过了这个时间的时候就会报超时错误了,所以我们可以给dubbox配置一个超时时间。
配置的方式有两种,一种是在提供方配置,例如;
注意:这里的service注解的包不是spring的是dubbox的com.alibaba.dubbo.config.annotation.Service;
另一种是在消费方配置,例如:
当然,通常情况下,我们都是在提供方配置超时时间。 但是,我们要是两边都配置了超时时间,而且时间还不一样的时候,这个超时时间按照消费方配置的为准,也就是dubbox的超时时间优先读取消费方的超时时间。