Dubbo 第一個栗子

一、創建一個基礎Maven工程,作爲通用的接口

pom.xml 文件

<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.imagno</groupId>
  <artifactId>common</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <name>common</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
</project>


通用接口文件
package com.imagno.common;

public interface UserService {
	
	public String getUser(Integer i);

}


二、提供者

pom.xml  配置文件

<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.imagno</groupId>
  <artifactId>producer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>producer</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
  	<dependency>
	    <groupId>com.alibaba</groupId>
	    <artifactId>dubbo</artifactId>
	    <version>2.5.7</version>
	</dependency>

	<dependency>
		<groupId>com.github.sgroschupf</groupId>
		<artifactId>zkclient</artifactId>
		<version>0.1</version>
	</dependency>
	
        <!-- 上面第一節的通用公共接口,爲了減少代碼冗餘及工作量 -->
	<dependency>
		<groupId>com.imagno</groupId>
		<artifactId>common</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</dependency>
	
  </dependencies>
</project>

java 服務層實現類
package com.imagno.producer.impl;

import com.imagno.common.UserService;

public class UserServiceImpl implements UserService {

	public String getUser(Integer i) {
		System.out.println("被消息過1次");
		if (i == 1) {
			return "Java";
		}
		if (i == 2) {
			return "C++";
		}
		return "Go";
	}

}

package com.imagno.producer;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Provider {
	
	public static void main(String[] args) throws IOException {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
				new String[] { "producer.xml" });
		context.start();
		System.out.println("生產者啓動中!");
		System.in.read(); //讓程序阻塞
	}
	
}

dubbo xml
<?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管理頁面比較清晰是哪個應用暴露出來的 -->
    <dubbo:application name="dubbo_provider"></dubbo:application>
    
    <!--zookeeper註冊中心 -->  
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
	
    <!--使用multicast廣播註冊中心暴露服務地址 -->  
    <!-- <dubbo:registry address="multicast://10.10.8.101:20881" /> -->  
    <dubbo:protocol name="dubbo" port="20881" />  
    
    <dubbo:service interface="com.imagno.common.UserService" ref="userService"/>
    <bean id="userService" class="com.imagno.producer.impl.UserServiceImpl"/>
</beans>

三、消費者

pom.xml 文件
<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.imagno</groupId>
  <artifactId>customer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>customer</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
  	<dependency>
	    <groupId>com.alibaba</groupId>
	    <artifactId>dubbo</artifactId>
	    <version>2.5.7</version>
	</dependency>

	<dependency>
		<groupId>com.github.sgroschupf</groupId>
		<artifactId>zkclient</artifactId>
		<version>0.1</version>
	</dependency>
	
        
        <!-- 上面第一節的通用公共接口,爲了減少代碼冗餘及工作量 -->
<dependency><groupId>com.imagno</groupId><artifactId>common</artifactId><version>0.0.1-SNAPSHOT</version></dependency> </dependencies></project>



消費者java類
package com.imagno.customer;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.imagno.common.UserService;

public class Customer {
	public static void main(String[] args) {
		ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("customer.xml");
		app.start();
		UserService userService = (UserService)app.getBean("userService");
		String name = userService.getUser(2);
		System.out.println(name);
	}
}


dubbo配置xml
<?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="consumer-app"/>
    
    <!--zookeeper註冊中心 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    
    <!-- 生成遠程服務代理,可以和本地bean一樣使用 -->
    <dubbo:reference id="userService" interface="com.imagno.common.UserService"/>
</beans>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章