• Zookeeper注册中心概述


    Zookeeper介绍(配合Dubbox使用)

      官方推荐使用zookeeoer注册中心,注册中心负责服务地址的注册和查找,相当于目录服务,提供提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力小.

      zookeeper是Apacahe Hadoop的子项目,是一个树形的目录服务,支持变更推送,适合作为Dubbox服务的注册中心,工业强度较高,可用于生产环境.

      Zookeeper在Linux系统的安装

    安装步骤:

    第一步:安装Jdk

    第二步:把zookeeper的压缩包上传到linux系统.

    第三步:解压缩压缩包

    tar -zxvf zookeeper-3.4.6.tar.gz

    第四步:进入conf目录,吧zoo sample.cfg改名为zoo.cfg

    Zookeeper服务启动

    进入bin目录,启动服务输入命令

     ./zkServer.sh start

    输出一下内容表示启动成功

    关闭服务输入命令

    ./zkServer.sh stop

    查看状态:

    ./zkServer.sh status

    如果启动状态,提示:

    如果未启动状态,提示:

    如果想要配置离线约束:

    这个地址:http://code.alibabatech.com/schema/dubbo/dubbo.xsd

    不配置也是可以的.

    入门的一个小Demo

    配置Maven环境

    -DarchetypeCatalog=internal

    服务提供者开发:

    开发步骤:

    (1)创建Maven工程(WAR)dubboxdemo-service,  war项目  ,在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>cn.itcast.dubboxdemo</groupId>
      <artifactId>dubboxdemo-service</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>  
       <properties>        
            <spring.version>4.2.4.RELEASE</spring.version>
       </properties>    
        <dependencies>
            <!-- Spring -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</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-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>    
            <!-- dubbo相关 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.8.4</version>            
            </dependency>
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.6</version>
            </dependency>
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>        
            <dependency>
                <groupId>javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>3.11.0.GA</version>
            </dependency>    
    <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.28</version>
        </dependency>    
        </dependencies>
       <build>  
          <plugins>
              <plugin>  
                  <groupId>org.apache.maven.plugins</groupId>  
                  <artifactId>maven-compiler-plugin</artifactId>  
                  <version>2.3.2</version>  
                  <configuration>  
                      <source>1.7</source>  
                      <target>1.7</target>  
                  </configuration>  
              </plugin>  
              <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <configuration>
                        <!-- 指定端口 -->
                        <port>8081</port>
                        <!-- 请求路径 -->
                        <path>/</path>
                    </configuration>
                </plugin>
          </plugins>  
        </build>
    </project>

    (2)在工程的webapps下创建WEB-INF文件夹,创建web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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"
        version="2.5">    
        <!-- 加载spring容器 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext*.xml</param-value>
        </context-param>
        <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>    
    </web-app>

    (3)创建业务接口

    创建包cn.itcast.dubbodemo.service,用于存放业务接口,创建接口

    package cn.itcast.dubbodemo.service;
    /**
     * 业务接口
     * @author Administrator
     *
     */
    public interface UserService {    
        public String getName();    
    }

    (4)创建业务实现类

    创建包cn.itcast.dubbodemo.service.impl ,用于存放业务实现类。创建业务实现类:

    package cn.itcast.dubbodemo.service.impl;
    import com.alibaba.dubbo.config.annotation.Service;
    import cn.itcast.dubbodemo.service.UserService;
    @Service
    public class UserServiceImpl implements UserService {
        public String getName() {        
            return "itcast";
        }
    }

    注意:Service注解与原来不同,需要引入com.alibaba包下的

    5)编写配置文件

    src/main/resources下创建applicationContext-service.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:context="http://www.springframework.org/schema/context"
        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
         
        <dubbo:application name="dubboxdemo-service"/>  
    <dubbo:registry address="zookeeper://192.168.200.128:2181"/> 
    <dubbo:annotation package="cn.itcast.dubboxdemo.service" /> 
    </beans>

    注意:dubbo:annotation用于扫描@Service注解。

    3.5.2服务消费者开发

    开发步骤:

    1)创建Maven工程(WARdubboxdemo-web, war项目,在pom.xml引入依赖,同dubboxdemo-service”工程。区别就是把tomcat插件的运行端口改为8082

    2)在webapps目录下创建WEB-INF 目录,并创建web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <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"
        version="2.5">    
       <!-- 解决post乱码 -->
        <filter>
            <filter-name>CharacterEncodingFilter</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>utf-8</param-value>
            </init-param>
            <init-param>  
                <param-name>forceEncoding</param-name>  
                <param-value>true</param-value>  
            </init-param>  
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>        
      <servlet>
          <servlet-name>springmvc</servlet-name>      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:applicationContext-web.xml</param-value>
          </init-param>
      </servlet>  
      <servlet-mapping>
          <servlet-name>springmvc</servlet-name>
          <url-pattern>*.do</url-pattern>
      </servlet-mapping>
    </web-app>

    3)拷贝业务接口

    将“dubboxdemo-service”工程的cn.itcast.dubboxdemo.service 包以及下面的接口拷贝至此工程。

     4)编写Controller

     

    package cn.itcast.dubboxdemo.controller;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import cn.itcast.dubbodemo.service.UserService;
    @Controller
    @RequestMapping("/user")
    public class UserController {
        @Reference
        private UserService userService;    
        @RequestMapping("/showName")
        @ResponseBody
        public String showName(){
            return userService.getName();
        }        
    }

    5)编写spring配置文件

    src/main/resources下创建applicationContext-web.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:context="http://www.springframework.org/schema/context"
        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <mvc:annotation-driven>
          <mvc:message-converters register-defaults="true">
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">  
              <property name="supportedMediaTypes" value="application/json"/>
              <property name="features">
                <array>
                  <value>WriteMapNullValue</value>
                  <value>WriteDateUseDateFormat</value>
                </array>
              </property>
            </bean>
          </mvc:message-converters>  
        </mvc:annotation-driven>
        <!-- 引用dubbo 服务 -->
        <dubbo:application name="dubboxdemo-web" />
        <dubbo:registry address="zookeeper://192.168.200.128:2181"/>
         <dubbo:annotation package="cn.itcast.dubboxdemo.controller" />
    </beans>

    测试:

    启动服务消费方和服务提供方,两个tomcat,以内使用了插件,所以直接启动就好.

    tomcat7:run

     

    在浏览器输入http://localhost:8082/user/showName.do,查看浏览器输出结果

    package cn.itcast.dubbodemo.service.impl;

    import com.alibaba.dubbo.config.annotation.Service;

    import cn.itcast.dubbodemo.service.UserService;

    @Service

    publicclass UserServiceImpl implements UserService {

        public String getName() {      

            return"itcast";

        }

    }

  • 相关阅读:
    socket编程技巧(2)发送缓冲区和接收缓冲区的设置时机
    socket编程技巧(1)tcp接收接口(变长数据定长数据)的编写实例
    libnet介绍与分析
    TCP的6大标示符号
    数据帧中常见协议类型
    C语言中offsetof宏的应用
    ip欺骗(原始套接字系列九)
    ARP欺骗(原始套接字系列八)
    包分析(原始套接字七)
    了解Javascript中函数作为对象的魅力
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/10704558.html
Copyright © 2020-2023  润新知