dubbo应用实例

一、工程规划
dubbo-parent 父工程,依赖包管理
dubbo-common 公共工程,工具类
dubbo-api-user 用户服务接口工程,暴露用户服务接口
dubbo-service-user 用户服务工程,接口具体实现
dubbo-consumer 消费者工程,消费用户服务

二、具体实现

  1. dubbo-parent
    工程只有pom文件,添加spring、dubbo、zookeeper等依赖

使用dependencyManagement管理依赖,其他工程继承父工程时只需声明groupId和artifactId,不需添加version。

  1. dubbo-common(继承dubbo-parent)
    编写StringUtil类做测试用
public class StringUtil {
	public static String cutString(String str) {
		return str.substring(1);
	}
}
  1. dubbo-api-user(继承dubbo-parent,依赖cubbo-common)
    编写实体类User,接口IUser
package com.dubbo.entity;

import com.dubbo.util.StringUtil;

public class User {
	String id;
	String name;
		
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	public User() {
		id = "111";
		name = StringUtil.cutString("jim");
	}
}
package com.dubbo.api;

public interface IUser {
	public String getUser(String userId);
}
  1. dubbo-service-user(继承dubbo-parent,依赖dubbo-api-user)
    编写dubbo及bean配置文件spring-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context  
       http://www.springframework.org/schema/context/spring-context-3.2.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
       
    <!-- 配置要扫描的包 -->
	<context:component-scan base-package="com.dubbo" />
    <!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
    <dubbo:application name="dubbo-provider" />
    <!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
    <dubbo:registry address="zookeeper://localhost:2181" />
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <dubbo:service interface="com.dubbo.api.IUser" ref="iUser" protocol="dubbo" />
</beans>

UserService类为具体的服务实现

package com.dubbo.service;


import org.springframework.stereotype.Service;

import com.dubbo.api.IUser;
import com.dubbo.entity.User;

@Service("iUser")
public class UserService implements IUser{

	public String getUser(String userId) {
		
		User user = new User();
		return user.getName();
	}

}

编写Provider用于本地启动dubbo服务

package com.dubbo.test;

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


public class Provider {

	private static final Log log = LogFactory.getLog(Provider.class);

	public static void main(String[] args) {
		try {
			ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-context.xml");
			context.start();
		} catch (Exception e) {
			log.error("== DubboProvider context start error:",e);
		}
		synchronized (Provider.class) {
			while (true) {
				try {
					Provider.class.wait();
				} catch (InterruptedException e) {
					log.error("== synchronized error:",e);
				}
			}
		}
	}
}
  1. dubbo-consumer(继承dubbo-parent,依赖dubbo-api-user)
    编写spring-context.xml文件配置dubbo服务调用
<?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:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo 
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
	
    <dubbo:application name="dubbo-consumer"/>
    <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <dubbo:reference id="iUser" interface="com.dubbo.api.IUser"/>
</beans>

Consumer类启动本地消费者,调用User服务

package com.dubbo.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dubbo.api.IUser;

public class Consumer {

	public static void main(String[] args) throws InterruptedException {
		// TODO Auto-generated method stub

		ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("classpath:spring-context.xml");
        context.start();
        System.out.println("consumer start");
        while(true) {
        	IUser iUser = (IUser)context.getBean("iUser");
            System.out.println(iUser.getUser("1"));
            Thread.sleep(2000);
        }
	}
}

三、聚合工程
新建maven工程dubbo-package,编写pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.jim</groupId>
  <artifactId>dubbo-package</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
  <modules>
        <module>../dubbo-parent/pom.xml</module>
        <module>../dubbo-common/pom.xml</module>
        <module>../dubbo-api-user/pom.xml</module>
        <module>../dubbo-service-user/pom.xml</module>
        <module>../dubbo-consumer/pom.xml</module>
  </modules>
</project>

直接对该项目进行mvn clean, mvn package, mvn install可同时作用于所有模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值