dubbbo实战

一:服务者

1:首先创建dubbo-provider的maven项目(有独立的pom.xml,用来打包供提供者消费者使用)。 在项目中定义服务接口:该接口需单独打包,在服务提供方和消费方共享。项目的结构如下:

2:pom.xml内容如下:

  1. <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.mrp</groupId>
      <artifactId>dubbo-provider</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>dubbo-provider</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- springframe 版本控制 -->
        <spring.version>4.1.1.RELEASE</spring.version>
      </properties>
    
      <dependencies>
        <!-- springframe start -->
    
    	<dependency>
    		<groupId>org.springframework</groupId>
    		<artifactId>spring-jdbc</artifactId>
    		<version>${spring.version}</version>
    	</dependency>
    
    	<dependency>
    		<groupId>org.springframework</groupId>
    		<artifactId>spring-webmvc</artifactId>
    		<version>${spring.version}</version>
    	</dependency>
    
    	<dependency>
    		<groupId>org.springframework</groupId>
    		<artifactId>spring-context-support</artifactId>
    		<version>${spring.version}</version>
    	</dependency>
    
    	<!-- springframe end -->
    
    	<!--mysql数据库驱动 -->
    	<dependency>
    		<groupId>mysql</groupId>
    		<artifactId>mysql-connector-java</artifactId>
    		<version>5.1.38</version>
    	</dependency>
    	<!--log4j日志包 -->
    	<dependency>
    		<groupId>org.apache.logging.log4j</groupId>
    		<artifactId>log4j-core</artifactId>
    		<version>2.6.1</version>
    	</dependency>
    	<!-- JUnit单元测试工具 -->
    	<dependency>
    		<groupId>junit</groupId>
    		<artifactId>junit</artifactId>
    		<version>4.10</version>
    	</dependency>
    	<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.5.3</version>
    </dependency>
    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>
      </dependencies>
    </project>
    

3:provider.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-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
    <dubbo:application name="demotest-provider" owner="programmer" organization="dubbox"/>
    <!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->
    <dubbo:service interface="com.mrp.server.LoginServer" ref="loginServer" protocol="dubbo" />
    <!--具体实现该接口的 bean-->
    <bean id="loginServer" class="com.mrp.server.impl.LoginServerImpl"/>
</beans>

4:log4j.xml内容如下(可省略不要):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n" />
        </layout>
    </appender>
    <root>
        <level value="INFO" />
        <appender-ref ref="CONSOLE" />
    </root>
</log4j:configuration>

5:applicationContext.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:p="http://www.springframework.org/schema/p"
     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
     xmlns:tx="http://www.springframework.org/schema/tx"
     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-4.3.xsd
         http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
         http://www.springframework.org/schema/tx
         http://www.springframework.org/schema/tx/spring-tx.xsd">
     
     <import resource="provider.xml"/>
     
     <!--定义一个jdbc数据源,创建一个驱动管理数据源的bean -->
     <bean id="jdbcDataSource"
         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
         <property name="driverClassName" value="com.mysql.jdbc.Driver" />
         <property name="url" value="jdbc:mysql://localhost:3306/user" />
         <property name="username" value="root" />
         <property name="password" value="123456" />
     </bean>
     <!-- 定义jdbc模板Bean -->
     <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
         p:dataSource-ref="jdbcDataSource" />
      <bean id="userDao" class="com.mrp.dao.UserDao">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
      </bean>
      <!-- 注册userService -->
		<bean id="loginServer" class="com.mrp.server.impl.LoginServerImpl">
		      <property name="userDao" ref="userDao"></property>
		</bean>
 </beans>

6:UserDao.java内容如下:

package com.mrp.dao;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class UserDao extends JdbcDaoSupport {

	public int getMatchCount(String name, String password) {
		String sql = "SELECT count(*) FROM user WHERE username = ? and password = ?";
		return this.getJdbcTemplate().queryForObject(sql, new Object[] { name, password }, Integer.class);
	}
}

7:创建接口LoginServer.java内容如下:

package com.mrp.server;

public interface LoginServer {

	public boolean checkLogin(String username, String password);
}

8:LoginServerImpl.java内容如下:

package com.mrp.server.impl;

import com.mrp.dao.UserDao;
import com.mrp.server.LoginServer;

public class LoginServerImpl implements LoginServer {

	private UserDao userDao;

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	public boolean checkLogin(String username, String password) {
		int count = userDao.getMatchCount(username, password);
		if (count > 0) {
			return true;
		}
		return false;
	}

}

9:Provider.java内容如下:

package com.mrp.provider;

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("applicationContext.xml");
		System.out.println(context.getDisplayName() + ": here");
		context.start();
		System.out.println("服务已经启动...");
		System.in.read();
	}
}

10:接口单独打包:(1):右击项目-->Run As-->Manven clean    (2):等待上一步成功后,右击项目-->Run As-->Manven install

11:在已经启动了zookeeper的前提下,运行Provider.java文件,控制台可看到如下内容:

二:消费者

1:首先创建dubbo-consumer的maven项目,项目结构如下:

2: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.mrp</groupId>
  <artifactId>dubbo-consumer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>dubbo-consumer</name>
  <url>http://maven.apache.org</url>

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

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
         <groupId>com.mrp</groupId>
         <artifactId>dubbo-provider</artifactId>
         <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.1.1.RELEASE</version>
</dependency>
<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-context-support</artifactId>
		<version>4.1.1.RELEASE</version>
	</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.5.3</version>
</dependency>
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>
  </dependencies>
</project>

3:log4j.xml内容如上

4:consumer.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="demotest-consumer" owner="programmer" organization="dubbox"/>
    <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
    <dubbo:reference id="permissionService" interface="com.mrp.server.LoginServer"/>
</beans>

5:Consumer.java内容如下:

package com.mrp.consumer;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.mrp.server.LoginServer;

public class Consumer {
	public static void main(String[] args) throws Exception {
		// 测试常规服务
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
		context.start();
		System.out.println("consumer start");
		LoginServer loginService = context.getBean(LoginServer.class);
		System.out.println("consumer");
		System.out.println("loginService==========" + loginService);
		// System.out.println(loginService.checkLogin("admin", "123"));
		boolean isLogin = loginService.checkLogin("admin", "123");
		if (isLogin) {

			System.out.println("登陆成功!");

		} else {

			System.out.println("登陆失败!");

		}
		System.in.read();
	}
}

6:在确保已经运行了provider服务者的前提下,运行Consumer.java文件

最后在Dubbo Admin后台可见如下内容:

猜你喜欢

转载自my.oschina.net/u/3734228/blog/1795744