spring boot+dubbo+zookeeper(SOA详细整合)

运行环境:JDK 7 或 8,Maven 3.0+

springboot1.5以上,zookeeper3.4.6,版本dubbo 2.5+版本(下面网盘里是2.5.4的)和spring boot整合实现SOA

技术简述:

dubbo 是一个高性能的RPC调用框架,更是SOA服务治理的一种方案

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。

当我们接口数庞大,提供的服务越来越来的时候,传统的方式逐渐不适合需求,SOA的服务治理方案就是其中最好的方法之一,可以暴露出 Dubbo 服务接口,提供给 Dubbo 消费者进行 RPC 的调用为我们更好的治理好服务。

百度网盘链接:http://pan.baidu.com/s/1cJcuzs 密码:msdl

安装zookeeper:

tar -zxvf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6/conf

spring boot+dubbo+zookeeper(SOA详细整合)

复制一份zoo_sample.cfg 文件 并将其命名为zoo.cfg

vi  zoo.cfg

tickTime=2000

dataDir=/usr/local/zookeeper/zookeeper-3.4.6/data
dataLogDir=/usr/local/zookeeper/zookeeper-3.4.6/logs

clientPort=2181

配置zookeeper集群加上server.1等等,等号后面是你的ip和取不同的端口号

#server.1=192.168.43.4:3882

#server.2=192.168.43.4:3883

#server.3=192.168.43.4:3884

退出保存好以后

启动zookeeper:

cd zookeeper-3.4.6/bin/

./zkServer.sh start 

JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}


看到这样说明zookeeper安装成功,因为这个不是集群,所以是单用户模式(集群以后会说)


安装dubbo:

将网盘里面下载的dubbo-admin-2.5.4.war直接放到tomcat下的webapps/下面

然后将dubbo-admin-2.5.3目录名称改为ROOT

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)[[email protected] ROOT]# ls
crossdomain.xml  dubbo-admin-2.5.4.war  images  META-INF    sv-SE.lnk
css              favicon.ico            js      SpryAssets  WEB-INF


vi dubbo.properties 

spring boot+dubbo+zookeeper(SOA详细整合)

dubbo.registry.address=zookeeper://127.0.0.1:2181

dubbo.admin.root.password=root

dubbo.admin.guest.password=guest


然后启动tomcat服务器,在浏览器上直接输入ip+port

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)192.168.43.4:8080

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)

这个时候会提示你输入密码,因为刚才我们配置的用户名和密码都是 root

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)

这样我们的dubbo就安装成功了 ,因为我们还没有服务,所以提供者和消费者都没有!!!


springboot:

打开idea,创建maven项目:

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)



服务端目录结构如下:

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)



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>

    <artifactId>dubbo_server_test</artifactId>
    <name>dubboServer</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.7</java.version>
    </properties>

    <!-- spring-boot-starter-parent包含了大量配置好的依赖管理,在自己项目添加这些依赖的时候不需要写<version>版本号 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
        <relativePath/>
    </parent>	
 <!-- 配置依赖 -->
    <dependencies>
        <!-- springboot相关 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Dubbo相关 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <!-- 这里使用最新的2.8.4版本,*仓库不存在,请自行打入本地仓库  自行更换2.5.3版本-->
            <version>2.5.3</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- zookeeper 第三方操作工具类 -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.6</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- javassist 字节码类库 -->
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- 打包项目 mvn clean package -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <!-- mvn spring-boot:run 热部署启动 -->
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>

providers.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">

    <!-- 配置可参考 http://dubbo.io/User+Guide-zh.htm -->
    <!-- 服务提供方应用名,用于计算依赖关系 -->
    <dubbo:application name="providers"/>
    <!-- 定义 zookeeper 注册中心地址及协议 -->
    <dubbo:registry address="zookeeper://192.168.43.4:2181"/>
    <!-- 定义 Dubbo 协议名称及使用的端口,dubbo 协议缺省端口为 20880,如果配置为 -1 或者没有配置 port,则会分配一个没有被占用的端口 -->
    <dubbo:protocol name="dubbo" port="-1"/>
    <!-- 声明需要暴露的服务接口 -->
   <!-- <dubbo:service interface="com.jw.dubbo.service.TestService" ref="testService" timeout="10000"/>
    &lt;!&ndash; 和本地 bean 一样实现服务 &ndash;&gt;
    <bean id="testService" class="com.jw.dubbo.service.TestService" />-->
    <dubbo:annotation package="com.jw.dubbo.service"/>
</beans>

启动类代码如下:

spring boot+dubbo+zookeeper(SOA详细整合)

@ImportResource({"classpath:providers.xml"})
@SpringBootApplication
public class ServerApplication {
    public static void main(String[] args) {

        SpringApplication.run(ServerApplication.class,args);
    }
}

接口类:

spring boot+dubbo+zookeeper(SOA详细整合)

public interface TestService {
    User sayHello(String name);
}

实体类:

spring boot+dubbo+zookeeper(SOA详细整合)


import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = -1L;
    private String username;
    private Integer age;
    private String cityName;



实现类:

spring boot+dubbo+zookeeper(SOA详细整合)

@Service(version = "1.0.0")
public class TestServiceImpl implements TestService {
    @Override
    public User sayHello(String name) {
        return new User("jw",18,"beijin");
    }

启动ServerApplication.java

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)

看到这样的就说明成功了 !

现在我们再看dubbo

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)

现在我们可以看到提供者数为1,

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)


现在我们就可以看到服务提供者已经暴露的服务!


消费端目录结构:

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)

application.properties配置如下:

spring boot+dubbo+zookeeper(SOA详细整合)

server.port=8081

consumers.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">

    <!-- 配置可参考 http://dubbo.io/User+Guide-zh.htm -->
    <!-- 服务提供方应用名,用于计算依赖关系 -->
    <dubbo:application name="consumer"/>
    <!-- 定义 zookeeper 注册中心地址及协议 -->
    <dubbo:registry address="zookeeper://192.168.43.4:2181"/>
    <!-- 定义 Dubbo 协议名称及使用的端口,dubbo 协议缺省端口为 20880,如果配置为 -1 或者没有配置 port,则会分配一个没有被占用的端口 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!-- 声明需要暴露的服务接口 -->
   <!-- <dubbo:service interface="com.jw.dubbo.service.TestService" ref="testService" timeout="10000"/>-->
    <dubbo:annotation package="com.jw.dubbo.service"/>
</beans>

启动类:

spring boot+dubbo+zookeeper(SOA详细整合)

@ImportResource({"classpath:consumers.xml"})
@EnableAutoConfiguration
@SpringBootApplication(scanBasePackages = {"com.jw.dubbo"})
public class ClientApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(ClientApplication.class, args);
        TestConsumerService consumerService = run.getBean(TestConsumerService.class);
        consumerService.printHello();

    }
}

实体类和上面的server端一样就不说了 

接口类:

spring boot+dubbo+zookeeper(SOA详细整合)

public interface TestService {
    User sayHello(String name);
}

实现类:

spring boot+dubbo+zookeeper(SOA详细整合)

import com.alibaba.dubbo.config.annotation.Reference;
import com.jw.admin.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class TestConsumerService {
    @Reference(version = "1.0.0")
    TestService testService;

    public void  printHello(){
        String name = "jw";
        User user = testService.sayHello(name);
        System.out.println("dubbo client:"+user);
    }

启动CilentApplication.java类

看到控制台打印出:

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)


说明消费端也成功了!!


然后我们再看一下dubbo

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)

消费者数为1

spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)spring boot+dubbo+zookeeper(SOA详细整合)





这样我们集成就完成了,如果在使用过程中有什么问题,可以随时留言,可能每一个人的方法可能有些不一样,

但是我们的目的是一样的!