dubbo总结--dubbo的使用

dubbo是一个微服务框架,dubbo也是有一个服务注册中心(Zookeeper),服务提供者以及服务消费者。服务提供者需要一个暴露接口的工程,用来服务消费的调用。服务提供者的接口实现类继承暴露接口工程的接口。

dubbo调用流程
  1.服务容器负责启动,加载,运行服务提供者
  2.服务提供者在启动时,向注册中心注册自己提供的服务
  3.服务消费者在启动时,向注册中心订阅自己所需的服务
  4.注册中返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
  5.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用
  6.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计到监测中心
  注:建议使用Zookeeper来当注册中心比较好(2.3.3的dubbo以上),Dubbo未对Zookeeper服务端做任何侵入修改,只需按照原生的Zookeeper即可
      所有注册中心逻辑适配都在调用Zookeeper客户端时完成

dubbo还可以使用dubbo-admin进行dubbo服务的监控,只需下载dubbo-admin-2.5.7.war,放在Tomcat上启动工程,然后修改dubbo-admin项目中WEB-INF/dubbo.properties中zookeeper地址、用户名以及密码即可。

接下来就简单的讲述下一个dubbo的使用案例

一、工程项目说明

dubbo-facade-user项目工程是一个服务接口暴露项目工程,服务提供者的服务类继承此项目的对应接口,同时服务消费者会依赖此工程进行服务的调用。

即:服务提供者中的提供服务类PmsUserFacadeImpl 继承 服务暴露接口项目的PmsUserFacade接口

dubbo-service-user  服务提供者

dubbo-web-boss 服务消费者

二、服务提供者的使用

1、pom.xml依赖

<!-- spring包 core、web、oxm、tx、jdbc、webmvc、aop、context、test -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
<!-- dubbo -->
		<dependency>
			<groupId>org.jboss.netty</groupId>
			<artifactId>netty</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.springframework</groupId>
					<artifactId>spring</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

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

		<dependency>
			<groupId>com.101tec</groupId>
		<artifactId>zkclient</artifactId>
	</dependency>
	

这边只有dubbo和Spring的依赖,其他的想数据库、JSON处理的依赖就不在这具体说明了,本篇只是说明dubbo的使用,不讲述具体的业务代码

2、业务接口实现类的PmsUserFacadeImpl 

@Service("pmsUserFacade")
public class PmsUserFacadeImpl implements PmsUserFacade{

	@Autowired
	private PmsUserBiz pmsUserBiz;//dao层
	
	/**
	 * 根据ID获取用户信息.
	 * @param userId
	 * @return
	 */
	public PmsUser getById(Long userId) {
		return pmsUserBiz.getById(userId);
	}
}

3、继承的接口类PmsUserFacade

public interface PmsUserFacade {

	/**
	 * 根据ID获取用户信息.
	 * @param userId
	 * @return
	 */
	public PmsUser getById(Long userId);
}

4、spring的配置文件

<!-- 提供方应用信息,用于计算依赖关系(相当于服务名称) -->
	<dubbo:application name="gw-service-user" />

	<!-- 使用zookeeper注册中心暴露服务地址 -->
	<dubbo:registry protocol="zookeeper" address="${zookeeper-server-address}" />

	<!-- 用dubbo协议在20880端口暴露服务(Dubbo中有各种协议,这只是其中的一种) -->
	<dubbo:protocol name="dubbo"  port="20880" />
		
	<!-- 用户服务接口 -->
	<dubbo:service interface="com.zhuojing.facade.user.service.PmsUserFacade" ref="pmsUserFacade"/>

5、启动类

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * 
 * @描述: 启动Dubbo服务用的MainClass.
 * @作者: WuShuicheng .
 * @创建时间: 2013-11-5,下午9:47:55 .
 * @版本: 1.0 .
 */
@SuppressWarnings("resource")
public class DubboProvider {
	
	private static final Log log = LogFactory.getLog(DubboProvider.class);

	public static void main(String[] args) {
		try {
			ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/spring-context.xml");
			context.start();
		} catch (Exception e) {
			log.error("== DubboProvider context start error:",e);
		}
		synchronized (DubboProvider.class) {
			while (true) {
				try {
					DubboProvider.class.wait();
				} catch (InterruptedException e) {
					log.error("== synchronized error:",e);
				}
			}
		}
	}
    
}

三、服务的消费者

1、pom.xml依赖

在服务消费者的pom.xml依赖的基础上依赖接口暴露的jar包dubbo-facade-user

2、Spring配置文件

	<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
	<dubbo:application name="edu-web-boss" />

	<!-- 使用zookeeper注册中心暴露服务地址 -->
	<!-- 注册中心地址 -->
	<dubbo:registry protocol="zookeeper"  address="${zookeeper-server-address}" />
	
	<!-- 用户服务接口,check等于false表示调用时候才去检查dubbo服务是否启动,true则项目运行就检查-->
	<dubbo:reference interface="com.zhuojing.facade.user.service.PmsUserFacade" id="pmsUserFacade" check="false"/>

3、服务消费者的调用

@Controller
public class PmsUserAction extends BaseAction {


	@Autowired
	private PmsUserFacade pmsUserFacade;

    @RequestMapping("test.action")
    @ResponseBody
	public PmsUser viewPmsUserUI(ModelMap model) {
		PmsUser pmsUser = pmsUserFacade.getById(userId);
        return pmsUser;
    }

}

服务提供者和服务消费者启动后可以在Dubbo的管理平台上可以看到

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值