dubbo的简单使用

想要理解dubbo,可以先理解httpclient。

httpclient的过程是:客户端发送请求到系统A,系统A通过httpclient向系统B提供的接口进行访问。

dubbo的过程也是类似的,只是把httpclient改为dubbo了。

dubbo的体系是:

容器(spring),生产者(接口与实现类),注册中心(zookeeper),消费者(注入一个接口),监控(dubbo-monitor-simple-2.5.3),管理(dubbo-admin-2.8.4.war)

过程是:生产者的实现类会在spring容器中。生产者在zookeeper上注册一个接口(这个接口在生产者里面必定有一个实现类),并在dubbo协议里面暴露。消费者也通过与zookeeper的注册,通过接口名,去zookeeper中找到对应的接口,然后调用接口在生产者上对应的实现类。监控只是注册在生产者一端。

一个简单的例子:

前台系统在某些条件下会通过拦截器中去访问单点登录系统,目的是查询用户是否已经登录,以前我们用的方法是让前台系统(消费者)通过httpclient去调用API,现在我们可以做一个服务工程(目前用的是war,因为它可以被spring管理)。这个服务工程可以理解为生产者,考虑到生产者和消费者之间有共有的部分,所以就创建一个jar,里面只是一些公共部分。

假设服务工程为sso-query-service,公共部分的jar工程为sso-query-service-api。

sso-query-service-api中只有实体类User和一个接口UserQueryService,接口中也只有一个queryUserByToken(String token)方法。

sso-query-service作为web工程,是为了在tomcat启动时,加载spring父容器,另外一个考虑是可以使用controller,让前台也能通过ajax或jsonp直接访问。

该web工程定义了一个UserController,专门用于前台http访问,

@RequestMapping("user")
@Controller
public class UserController {


@Autowired
private UserQueryService userQueryService;//这个接口来自sso-query-service-api工程

@RequestMapping(value = "{token}", method = RequestMethod.GET)
public ResponseEntity<User> queryUserByToken(@PathVariable("token") String token) {
try {
User user = this.userQueryService.queryUserByToken(token);
if (null == user) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
return ResponseEntity.ok(user);
} catch (Exception e) {
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
}

另外还定义了一个UserQueryService 的实现类

//@Service因为在dubbo-server.xml中注册了,tomcat启动时会启动spring父容器
public class UserQueryServiceImpl implements UserQueryService {

@Autowired
private RedisService redisService;

private static final String KEY = "TOKEN_";

@Override
public User queryUserByToken(String token) {
User user = (User) redisService.get(KEY + token);
if (user == null) {
return null;
}
// 重新设置token过期时间
redisService.expire(KEY + token, 30L);
return user;
}
}

接下去就是dubbo-server.xml了:

<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="sso-query-server" />自定义

<!-- 这里使用的注册中心是zookeeper -->
<dubbo:registry address="zookeeper://192.168.48.131:2182?backup=192.168.48.131:2181,192.168.48.131:2183" client="zkclient" />


<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />


<!-- 将该接口暴露到dubbo中 -->
<dubbo:service interface="sso.query.api.UserQueryService " ref="userQueryServiceImpl" />


<!-- 将具体的实现类加入到Spring容器中 -->
<bean id="userQueryServiceImpl" class="sso.query.service.UserQueryServiceImpl" />

<dubbo:monitor protocol="registry"/> 添加一个监听

这样启动tomcat,就把dubbo服务启动了。

前台系统首先要配置一个dubbo-consumer.xml:

<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="taotao-web" />

<!-- 这里使用的注册中心是zookeeper -->
<dubbo:registry address="zookeeper://192.168.48.131:2182?backup=192.168.48.131:2181,192.168.48.131:2183" client="zkclient" />

<!-- 从注册中心中查找服务 -->
<dubbo:reference id="userQueryService"
interface="sso.query.api.UserQueryService" />这个interface要与dubbo-server.xml中的对应,这样才能找到

做了这个配置后,要在web.xml中追加<param-value>classpath:spring/applicationContext*.xml,classpath:dubbo/dubbo*.xml</param-value>

最后在前台系统原本使用httpclient去调用单点登录系统的API接口的方式改为注入一个UserQueryService,调用这个接口的queryUserByToken(String token)即可,最终是由UserQueryServiceImpl提供服务。

总结:dubbo其实与httpclient很类似,只不过从webservice(Restful)的方式改为RPC方式

-----------------------------------------------------------------------------

关于监控的配置主要是解压dubbo-monitor-simple-2.5.3后,修改dubbo.properties,

dubbo.registry.address=zookeeper://192.168.48.131:2181?client=zkclient

dubbo.jetty.port=8282这个端口视情况修改。

关于服务,主要是将dubbo-admin-2.8.4.war解压,然后找一个tomcat,去掉webapps中ROOT中的内容,将解压的东西拷贝进去(webapps会自动解压,ROOT中不会),然后修改ROOT-->WEB-INF-->dubbo.properties

主要是修改dubbo.registry.address=zookeeper://192.168.48.131:2181?client=zkclient。最后启动tomcat,xxx:8080就能访问了,账号root,密码root

----------------------------------------------------------

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>


<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>xxx</version>
</dependency>


<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>xxx</version>
</dependency>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值