请选择 进入手机版 | 继续访问电脑版

好程序员-千锋教育旗下高端IT职业教育品牌

400-811-9990
我的账户
好程序员

专注高端IT职业培训

亲爱的猿猿,欢迎!

已有账号,请

如尚未注册?

[BigData] 好程序员大数据培训分享基于dubbo和zookeeper的微服务实现案例

[复制链接]
叶子老师 发表于 2019-11-15 18:55:43 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
好程序员大数据培训分享基于dubbo和zookeeper的微服务实现案例注册中心-zookeeper1.zookeeper
        zookeeper可以在分布式项目中承担以下几个功能:
                1)注册中心
                2)存储数据: 分布式锁
                3)观察者模式:做到多个分布式服务器之间的数据同步
2.如何搭建zookeeper
        要么使用docker搭建,要么使用原生的方式搭建。
1)在虚拟机上安装jdk
l 上传jdk的压缩包到虚拟机的 /usr/local/java文件夹内
l 解压缩
        tar -zxvf jdk.....tar.gz
l 配置环境变量
        vim /etc/profile
        复制以下内容到该文件的末尾
       
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export JRE_HOME=/usr/local/java/jdk1.8.0_191/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
l 保存并退出
                wq
l 让配置生效
                source /etc/profile
       
2)安装Zookeeper
l 上传压缩包到linux
l 解压缩
3)获得zoo.cfg配置文件
        zookeeper/conf文件夹内,修改zoo_sample.cfg中的内容后并重命名成zoo.cfg
4)如何使用zookeeper(做注册中心)
        注意: 要使用linux中的命令,必须两种方式: 要么./zkServer.sh  要么是完整路径:
/usr/local/zookeeper/zookeeper-3.4.14/bin/zkServer.sh
       
l 如何启动zk
        ./zkServer.sh start
l 如何查看zk状态
        ./zkServer.sh status
l 如何关闭zk
        ./zkServer.sh stop
二、使用Dubbo来实现服务间的调用
        相关概念:
                1) 工程:  包含多个项目的一个统称
        1.创建父工程        2.在父工程中创建一个接口项目
接口项目取消父依赖
图片1.png
在项目中创建具体的接口
图片2.png
3. 在父工程中创建服务的提供者 图片3.png
编写实现类,实现接口,并重写方法,注意要把api的项目依赖进来。
图片4.png
4.在服务提供者项目中使用dubbo
1)创建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="product-service-provider"/>

    <!--配置注册中心的地址-->
    <dubbo:registry address="zookeeper://10.31.163.100:2181"/>

    <!--配置当前服务在dubbo中的协议端口-->
    <dubbo:protocol port="20880"/>

    <!--配置接口-->
    <dubbo:service interface="com.qf.service.product.api.IProductService" ref="productService"/>

    <!--配置接口的实现类-->
    <bean id="productService" class="com.qf.product.service.impl.ProductServiceImpl"/>



</beans>
2)编写单元测试,引入配置文件,并启动dubbo
注意:前提是要启动zk注册中心
public class TestServiceProvider {

    @Test
    public void testService() throws IOException {
        
        ClassPathXmlApplicationContext context  =
                new ClassPathXmlApplicationContext(new String[]{"classpath:provider.xml"});
        //将服务提交给dubbo的container,然后注册到注册中心上
        context.start();
        System.out.println("商品服务开始提供服务");
        System.out.println("按任意键停止");
        //让服务在收到任意输入内容之前不会结束
        System.in.read();

    }
}
当看到这个结果就表示服务发布成功
图片8.png
5.创建服务消费者项目1)引入依赖
<!--引入dubbo的依赖-->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>dubbo</artifactId>
  <version>2.5.8</version>
</dependency>
<!-- zookeeper客户端依赖 -->
<dependency>
  <groupId>com.github.sgroschupf</groupId>
  <artifactId>zkclient</artifactId>
  <version>0.1</version>
</dependency>

<dependency>
  <groupId>com.qf</groupId>
  <artifactId>my-dubbo-product-api</artifactId>
  <version>1.0.0-SNAPSHOT</version>
</dependency>
2)编写配置文件
<?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="product-consumer"/>

    <!--配置注册中心的地址-->
    <dubbo:registry address="zookeeper://10.31.163.100:2181"/>

    <!--配置要使用的接口所在的路径-->
    <dubbo:reference interface="com.qf.service.product.api.IProductService" id="productService"/>




</beans>
3)在单元测试中去调用service
@Test
public void testInvoke(){

    ClassPathXmlApplicationContext context =
            new ClassPathXmlApplicationContext(new String[]{"classpath:consumer.xml"});

    IProductService productService = (IProductService) context.getBean("productService");

    String s = productService.showProd();
    System.out.println(s);


}
小结:
图片7.png
三、在Springboot项目中使用dubbo1.方式一: 基于XML的整合方式1)创建springboot的服务提供者项目
1)引入依赖
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>
2)将xml配置文件放进resources中
3)在springboot的入口类上打上注解:@ImportResource("classpath:provider.xml")
2)创建springboot的服务消费者项目
1)引入依赖
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>
2)将xml配置文件放进resources中
3)在springboot的入口类上打上注解:@ImportResource("classpath:consumer.xml")
4)使用autowired将接口的实现类的对象自动注入进来,相当于是通过dubbo(zk)来提供服务的提供者的类。
@SpringBootTest
class MySpringBootProductConsumerApplicationTests {

    @Autowired
    private IProductService productService;


    @Test
    void contextLoads() {

        System.out.println(productService.showProduct());


    }

}
2.方式二:基于注解的整合方式
1)创建服务提供者项目
1)引入依赖
2)编写application.yml文件,加入以下配置(本来在xml中的配置将写在yml中)
server:
  port: 8081
dubbo:
  application:
    name: product-service-provider
  registry:
    address: zookeeper://10.31.163.100:2181
  protocol:
    port: 20884
3)编写服务提供者类并实现接口,并在接口上打上注解:
        @Component
        @Service <==import com.alibaba.dubbo.config.annotation.Service;
4)在入口类上打上注解
        @EnableDubbo
2)创建服务消费者项目
1)引入依赖
2)编写application.yml文件,加入以下配置(本来在xml中的配置将写在yml中)
server:
  port: 8082
dubbo:
  application:
    name: product-consumer
  registry:
    address: zookeeper://10.31.163.100:2181
3)在需要用到服务提供者类的时候,使用@Reference注解
来自于com.alibaba.dubbo.config.annotation.Reference;
@SpringBootTest
class MySpringBootAnnotationProductConsumerApplicationTests {

    @Reference
    private IProductService productService;


    @Test
    void contextLoads() {

        System.out.println(productService.showProduct());

    }

}
4)在入口类上打上注解
        @EnableDubbo
好程序员大数据培训http://www.goodprogrammer.org/bigdata.shtml

精彩内容,一键分享给更多人!
回复

使用道具 举报

您需要登录后才可以回帖

本版积分规则

关注我们
好程序员
千锋好程序员

北京校区(总部):北京市海淀区宝盛北里西区28号中关村智诚科创大厦

深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619

杭州龙驰智慧谷校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层

郑州校区:郑州市二七区航海中路60号海为科技园C区10层、12层

Copyright 2007-2019 北京千锋互联科技有限公司 .All Right

京ICP备12003911号-5 京公安网11010802011455号

请您保持通讯畅通1对1咨询马上开启