• dubbo zookeeper图解入门配置


    这次主要是对dubbo 和zookeeper的配置做个记录,以便以后自己忘记了,或者踩的坑再次被踩

    快速阅读

    zookeerer类似 springcloud中的Eureka都做为注册中心,用srpingboot建立三个项目生产者,消费者,公共接口,引用阿里的dubbo做为rpc框架, 生产者负责实现接口的业务逻辑 并且在zookeeper注册中心中注册,同是消费者也连接zookeeper注册中心进行消息调用 。

    优点:

    做为分布式服务架构,将核心业务抽取出来,稳定服务器,同时扩展方便 。可以针对高并发数据进行快速合理的扩展和监控。提高集群的利用率

    zookeeper的配置

    1. 下载zookeeper 我用的版本是3.4.13

      http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz

    2. linux服务器解压

      下载以后放到linux服务器上直接解压就可以了。

      [root@bogon hcb]# tar zxvf zookeeper-3.4.13.tar.gz -C /usr
      
    3. 备份zoo.cfg配置文件

      直接把zoo_sample.cfg改名就可以了。o

      mv /usr/zookeeper-3.4.13/conf/zoo_sample.cfg zoo.cfg
      
    4. 启动zookeeper

      我是因为已经启动过了,显示 already running

      [root@bogon bin]# ./zkServer.sh start
      ZooKeeper JMX enabled by default
      Using config: /usr/zookeeper-3.4.13/bin/../conf/zoo.cfg
      Starting zookeeper ... already running as process 2521.
      
    5. 查看zookeeper状态

      如果有standalone表示启动正常 可以正常使用

      [root@bogon bin]# ./zkServer.sh status
      ZooKeeper JMX enabled by default
      Using config: /usr/zookeeper-3.4.13/bin/../conf/zoo.cfg
      Mode: standalone
      
      
    6. 检查是否可以正常使用

      用telnet 来测试

      telnet 192.168.159.131 2181
      

      虚拟机的linux可以ping通

      1561033258518

      但是win7主机外面无法ping通

      1561033314530

      这一般是因为linux的防火墙问题,直接关闭就可以了

    7. 关闭linux 防火墙

      1. 检查防火墙状态,

        显示状态为running表示防火墙正在运行

        [root@bogon bin]# firewall-cmd --state
        running
        
      2. 关闭linux防火墙,并再次查询状态

        [root@bogon bin]# systemctl stop firewalld.service
        [root@bogon bin]# firewall-cmd --state
        not running
        
      3. 禁止开机启动防火墙

        [root@bogon bin]# systemctl disable firewalld.service
        Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
        Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
        

        在win主机上再次telnet,可以成功连接

        1561033489746

        创建spring boot项目进行连接zookeeper

        1. 用Ideal创建一个maven项目 ,在项目里添加三个module

          这三个项目分别是生产者dubboprovider 消费者dubboconsumer 接口duoboapi

          创建一个maven的项目

          1560945620551

          输入项目名字

          1560945665537

          下一步

          1560945713741

          进入项目界面

          1560945778728

          新建provider module

          1560945922825

          1560945942977

          1560945950011

          同样的方法 创建其它两个module,结果如下所示三个module创建完毕

          1561033762633

        2. 配置主项目 pom.xml

          引用三个主要的依赖,

          dubbo-spring-boot-starter: 在spring容器中注入特定bean ,集成了dubbo和spring boot

          zookeeper:zookeeper的依赖

          zkclient:zookeeper的客户端依赖

           <dependencies>
                  <dependency>
                      <groupId>com.alibaba.spring.boot</groupId>
                      <artifactId>dubbo-spring-boot-starter</artifactId>
                      <version>1.0.2</version>
                  </dependency>
                  <dependency>
                      <groupId>org.apache.zookeeper</groupId>
                      <artifactId>zookeeper</artifactId>
                      <version>3.4.13</version>
                  </dependency>
                  <dependency>
                      <groupId>com.101tec</groupId>
                      <artifactId>zkclient</artifactId>
                      <version>0.10</version>
                  </dependency>
              </dependencies>
          
        3. 定义接口

          在dubboapi 模块中java下,新建一个类com.hcb.Service.IHelloService

          package com.hcb.Service;
          
          public interface  IHelloService {
              String SayHello(String name);
          }
          
          
        4. 实现 生产者模块

          在该模块的pom.xml引用接口

          <groupId>com.hcb</groupId>
              <artifactId>dubboprovider</artifactId>
              <dependencies>
                  <dependency>
                      <groupId>com.hcb</groupId>
                      <artifactId>dubboapi</artifactId>
                      <version>1.0-SNAPSHOT</version>
                  </dependency>
              </dependencies>
          

          新建main入口方法

          引用@SpringBootApplication,@EnableDubboConfiguration 注解

          • @SpringBootApplication 整合了三个注解。(默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan

          • @Configuration 是和@Bean 把实体model翻译成了xml的配置文件 ,使配置更简单

          • @EnableAutoConfiguration 能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。

          • @ComponentScan 会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller。

          • @EnableDubboConfiguration, 表示要开启dubbo功能.

          参考:https://www.cnblogs.com/MaxElephant/p/8108140.html

          package com.hcb;
          
          import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
          import org.springframework.boot.SpringApplication;
          import org.springframework.boot.autoconfigure.SpringBootApplication;
          
          import java.util.concurrent.CountDownLatch;
          
          @SpringBootApplication
          @EnableDubboConfiguration
          public class provider {
              public static void main(String[] args) throws InterruptedException {
                  SpringApplication.run(provider.class,args);
                  new CountDownLatch(1).await();
              }
          }
          
          

          定义一个类com.hcb.Service.HelloService 来实现 接口

          @Service注解,将自动注册到Spring容器,不需要再定义bean了

          @component (把普通pojo实例化到spring容器中,相当于配置文件中的

          泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),

          package com.hcb.Service;
          
          import com.alibaba.dubbo.config.annotation.Service;
          import org.springframework.stereotype.Component;
          
          @Service
          @Component
          public class HelloSevice implements IHelloService {
              public String SayHello(String name){
                  return "hi "+name;
              }
          }
          		
          

          resoruces中新建application.properties配置 文件

          指定名字并给出要注册的zookeepr的地址

          spring.dubbo.appname=dubboprovider
          spring.dubbo.registry=zookeeper://192.168.159.131:2181
          

          启动

          在provider类中在击main方法所在的类,然后选择run

          1561035282837

          程序正常启动不报错

          1561035346692

        5. 消费者模块的配置

          1. 消费者consume中pom.xml的配置 ,

            引入接口和spring-boot-starter-web 是指这是一个web模块

            spring-boot-starter-web如果用2.1.5.RELEASE 会报错,先用1.5.3

               <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-web</artifactId>
                        <version>1.5.3.RELEASE</version>
                    </dependency>
                    <dependency>
                        <groupId>com.hcb</groupId>
                        <artifactId>dubboapi</artifactId>
                        <version>1.0-SNAPSHOT</version>
                    </dependency>
            
          2. 建立配置文件 和provider一样,名字换成consumer就可以

            spring.dubbo.appname=dubboconsumer
            spring.dubbo.registry=zookeeper://192.168.159.131:2181
            
          3. 建立启动类

            package com.hcb;
            
            import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
            import org.springframework.boot.SpringApplication;
            import org.springframework.boot.autoconfigure.SpringBootApplication;
            
            import java.util.concurrent.CountDownLatch;
            
            @SpringBootApplication
            @EnableDubboConfiguration
            public class Consumer {
                public static void main(String[] args)  {
                    SpringApplication.run(Consumer.class,args);
                }
            }
            
            
          4. 建立controll类实现接口

            package com.hcb;
            
            import com.alibaba.dubbo.config.annotation.Reference;
            import com.hcb.Service.IHelloService;
            import org.springframework.web.bind.annotation.RequestMapping;
            import org.springframework.web.bind.annotation.RequestParam;
            import org.springframework.web.bind.annotation.RestController;
            
            @RestController
            @RequestMapping("/hello")
            public class HelloController {
                @Reference
                IHelloService ihelloService;
            
                @RequestMapping
                public String hello(@RequestParam String name){
                    return ihelloService.SayHello(name);
                }
            }
            
            
          5. 启动消费者

            1561035794634

            1561035816270

          6. 测试

            浏览器中输入 http://localhost:8080/hello?name=%E6%A1%82%E6%9E%97

            正确显示出来

            1561036292281

    源码下载地址:
    链接:https://pan.baidu.com/s/1WO2BQnsmIxP04mWNZin93A
    提取码:5h0w

  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/hsapphire/p/11061725.html
Copyright © 2020-2023  润新知