美文网首页
Dubbo入门教程

Dubbo入门教程

作者: 小愚笨 | 来源:发表于2017-03-27 18:07 被阅读7167次

    实现功能

    存在2个系统,A系统和B系统,A系统调用B系统的接口获取数据.

    安装zookeeper

    1. 解压zookeeper-3.4.8.tar.gz,将/conf/zoo_sample.cfg修改为zoo.cfg,修改配置文件

      Paste_Image.png

    2.双击启动zookeeper

    Paste_Image.png

    创建工程B

    • 新建B工程Maven项目


      Paste_Image.png
    • 导入依赖

    <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>io.menm91</groupId>
        <artifactId>dubbo-b</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <packaging>war</packaging>
        <dependencies>
            <dependency>
                <groupId>io.menm91</groupId>
                <artifactId>dubbo-b-api</artifactId>
                <version>1.0.0-SNAPSHOT</version>
            </dependency>
            <!-- dubbo采用spring配置方式,所以需要导入spring容器依赖 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.1.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.6.4</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.5.3</version>
                <exclusions>
                    <exclusion>
                        <!-- 排除传递spring依赖 -->
                        <artifactId>spring</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            
            <!-- 导入zookeeper依赖 -->
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.3.3</version>
            </dependency>
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <port>8081</port>
                        <path>/</path>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    
    • 配置log4j文件

      log4j.properties

    log4j.rootLogger=DEBUG,A1
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
    

    创建B-API工程

    • 新建B-API工程MAVEN项目

      Paste_Image.png
    • 新建User类

    package io.menm91.bean;
    
    //使用dubbo要求传输的对象必须实现序列化接口
    public class User implements java.io.Serializable {
    
         private static final long serialVersionUID = -2668999087589887337L;
    
         private Long id;
    
         private String username;
    
         private String password;
    
         private Integer age;
    
         public Long getId() {
                 return id;
         }
    
         public void setId(Long id) {
                 this.id = id;
         }
    
         public String getUsername() {
                 return username;
         }
    
         public void setUsername(String username) {
                 this.username = username;
         }
    
         public String getPassword() {
                 return password;
         }
    
         public void setPassword(String password) {
                 this.password = password;
         }
    
         public Integer getAge() {
                 return age;
         }
    
         public void setAge(Integer age) {
                 this.age = age;
         }
    
        @Override
        public String toString() {
            return "User [username=" + username + ", age=" + age + "]";
        }
    
    }
    
    • 创建UserService(接口)提供查询服务
    package io.menm91.service;
    
    import io.menm91.bean.User;
    import java.util.List;
    
    public interface UserService {
    
        /**
         * 查询所有用户
         * @return
         */
        public List<User> queryAll();
    }
    

    在B工程中导入B-API的依赖

    • 导入B-API工程的依赖

      Paste_Image.png
    • 创建UserServiceImpl实现类

    package io.menm91.service.impl;
    
    import io.menm91.bean.User;
    import io.menm91.service.UserService;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class UserServiceImpl implements UserService {
    
        /**
         * 这里通过模拟查询数据库返回用户信息
         */
        public List<User> queryAll() {
            List<User> list = new ArrayList<User>();
            for (int i = 0; i < 10; i++) {
                    User user = new User();
                    user.setAge(10 + i);
                    user.setId(Long.valueOf(i + 1));
                    user.setPassword("123456");
                    user.setUsername("username_" + i);
                    list.add(user);
            }
            return list;
        }
    
    
    }
    
    • 编写dubbo配置文件
    Paste_Image.png
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
        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-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
        <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:application name="dubbo-b-server" />
    
        <!-- 这里使用的注册中心是zookeeper -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181"
            client="zkclient" />
    
        <!-- 用dubbo协议在20880端口暴露服务 -->
        <dubbo:protocol name="dubbo" port="20880" />
    
        <!-- 将该接口暴露到dubbo中 -->
        <dubbo:service interface="io.menm91.service.UserService"
            ref="userServiceImpl" />
    
        <!-- 将具体的实现类加入到Spring容器中 -->
        <bean id="userServiceImpl" class="io.menm91.service.impl.UserServiceImpl" />
    
    </beans>
    
    • 编写web.xml文件
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="WebApp_ID" version="2.5">
    
        <display-name>dubbo-b</display-name>
    
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dubbo/dubbo-*.xml</param-value>
        </context-param>
    
        <!--Spring的ApplicationContext 载入 -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    
    </web-app>
    
    • 启动tomcat
    Paste_Image.png

    搭建A系统MAVEN项目

    • 创建A系统maven项目

      Paste_Image.png
    • 导入依赖

    <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>io.menm91</groupId>
        <artifactId>dubbo-a</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <dependencies>
            <dependency>
                <groupId>io.menm91</groupId>
                <artifactId>dubbo-b-api</artifactId>
                <version>1.0.0-SNAPSHOT</version>
            </dependency>
            <!-- dubbo采用spring配置方式,所以需要导入spring容器依赖 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.1.3.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.6.4</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.5.3</version>
                <exclusions>
                    <exclusion>
                        <!-- 排除传递spring依赖 -->
                        <artifactId>spring</artifactId>
                        <groupId>org.springframework</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.3.3</version>
            </dependency>
    
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>
            
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>
    </project>
    
    • 配置log4j.properties文件

      log4j.properties

      log4j.rootLogger=DEBUG,A1
      log4j.appender.A1=org.apache.log4j.ConsoleAppender
      log4j.appender.A1.layout=org.apache.log4j.PatternLayout
      log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
      
    • 编写dubbo配置文件

    Paste_Image.png
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
        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-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    
        <!-- 提供方应用信息,用于计算依赖关系 -->
        <dubbo:application name="dubbo-a-consumer" />
    
        <!-- 这里使用的注册中心是zookeeper -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181"
            client="zkclient" />
    
        <!-- 从注册中心中查找服务 -->
        <dubbo:reference id="userService"
            interface="io.menm91.service.UserService" />
    
    </beans>
    
    • 编写UserServiceTest测试类

      Paste_Image.png
    package io.menm91.service;
    
    import io.menm91.bean.User;
    
    import java.util.List;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class UserServiceTest {
    
        private UserService userService;
        @Before
        public void setUp() throws Exception {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                    "classpath:dubbo/dubbo-*.xml");
            userService = applicationContext.getBean(UserService.class);
        }
    
        @Test
        public void testQueryAll() {
            List<User> userList = userService.queryAll();
            for(User user : userList){
                System.out.println(user.toString());
            }
        }
    
    }
    
    • 查看输出结果

      Paste_Image.png

    源代码:https://github.com/menm91/dubbo-index.git

    相关文章

      网友评论

          本文标题:Dubbo入门教程

          本文链接:https://www.haomeiwen.com/subject/ggmrottx.html