首先引入Dubbo相关依赖:
<cxf-core.version>3.0.4</cxf-core.version>
<resteasy-client.version>3.5.1.Final</resteasy-client.version>
<hessian.version>4.0.51</hessian.version>
<xmemcached.version>2.4.3</xmemcached.version>
<curator-framework.version>2.12.0</curator-framework.version>
<zkclient.version>0.10</zkclient.version>
<!-- https://mvnrepository.com/artifact/com.alibaba.dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-core -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>${cxf-core.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jboss.resteasy/resteasy-client -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>${resteasy-client.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.caucho/hessian -->
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>${hessian.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.googlecode.xmemcached/xmemcached -->
<dependency>
<groupId>com.googlecode.xmemcached</groupId>
<artifactId>xmemcached</artifactId>
<version>${xmemcached.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator-framework.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>${zkclient.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
假设消费方希望调用提供方的下列接口:
public interface CityDubboService {
/**
* 根据城市名称,查询城市信息
*
* @param cityName
*/
City findCityByName(String cityName);
}
我们先看服务提供方这边的使用形式:
- 第一步需要有实现此接口,当消费方调用时能有对象来执行业务逻辑。
import com.alibaba.dubbo.config.annotation.Service;
import com.bob.integrate.dubbo.common.entity.City;
import com.bob.integrate.dubbo.common.service.CityDubboService;
/**
* 城市业务 Dubbo 服务层实现层
*/
@Service(version = "1.0.0")
public class CityServiceProvider implements CityDubboService {
@Override
public City findCityByName(String cityName) {
return new City(1L, 2L, "温岭", "是我的故乡");
}
}
同时使用Dubbo的@Service注解,将其注册为Spring的Bean和Dubbo的开放组件。
当然@Service注解能其作用的前提是将Dubbo框架整合入Spring中:
/**
* @author Administrator
* @create 2018-05-06 19:24
*/
@EnableDubbo
@Configuration
@PropertySource("classpath:dubbo-provider.properties")
public class DubboProviderContextConfig {
}
dubbo-provider.properties:
dubbo.application.name=provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
#可以直接设置组件的Bean名称,这样就不使用默认的构造函数生成,因此以dubbo.protocol开头的其他配置就没用了,直接在Bean里设置
#dubbo.protocol.id=dubboProtocolBean
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
这样Spring容器在启动时就会通过@EnableDubbo引入Dubbo,解析相应的配置,注册相应的组件。 不过在启动Spring前,请先启动zookeeper,让其接受提供者和消费者的服务注册。
Zookeeper版本选择3.4.*,匹配zkclient的版本。
2 . 下面看Dubbo消费者的使用方式:
/**
* @author Administrator
* @create 2018-05-06 19:25
*/
@EnableDubbo
@ComponentScan
@PropertySource("classpath:dubbo-consumer.properties")
public class DubboConsumerContextConfig {
}
dubbo-consumer.properties:
dubbo.application.name=consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
向将Dubbo引入Spring,同时配置zookeeper注册地址以及应用方名称。
之后就可以在Spring Bean中使用RPC服务:
@Component
public class CityServiceConsumer {
@Reference(version = "1.0.0")
private CityDubboService cityDubboService;
public void printCity() {
String cityName = "杭州";
City city = cityDubboService.findCityByName(cityName);
System.out.println(new Gson().toJson(city));
}
}
通过@Reference标识开放接口,在使用时就能调用提供方此接口的实现Bean,实现RPC调用。
以上就是最简化的Dubbo在Spring里的配置和使用形式。