一:服務者java
1:首先建立dubbo-provider的maven項目(有獨立的pom.xml,用來打包供提供者消費者使用)。 在項目中定義服務接口:該接口需單獨打包,在服務提供方和消費方共享。項目的結構以下:mysql
2:pom.xml內容以下:git
<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內容以下:github
<?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內容以下(可省略不要):web
<?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內容以下:spring
<?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內容以下:sql
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內容以下:apache
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內容以下:api
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後臺可見以下內容: