spring配置services接口异常_dubbo zookeeper 图解配置 入门

f84c4c339d78423c640a8d7908c560f1.png

dubbo zookeeper

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

快速阅读

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

优点:

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

zookeeper的配置

  1. 下载zookeeper 我用的版本是3.4.13http://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通

87af071148ab048f632e0fecae278943.png


但是win7主机外面无法ping通

f220edb9eecdf895483fb30290bb9943.png


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

  1. 关闭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,可以成功连接

25fb21d23043cf5f254536d61b929e34.png

创建spring boot项目进行连接zookeeper

      1. 用Ideal创建一个maven项目 ,在项目里添加三个module
        这三个项目分别是生产者dubboprovider 消费者dubboconsumer 接口duoboapi
        创建一个maven的项目

35cf36f51fdbb98f20e1de4632dba935.png


输入项目名字

00fb971e7af693e546361ade28180d25.png


下一步

40d9ebf024767c71d97e5f5ed6100e7f.png


进入项目界面

90a6da0bb39ee22f240ccd1e19dab5cc.png


新建provider module

621b6c58c5a8dda85a4cae7ba2761aca.png

14eaacf24315868dfcc80bea723d6a34.png

46c845bbbdf3974a9b24b1109c2b7b7f.png


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

774a94b950a86611d9b8af1f937a02fb.png
      1. 配置主项目 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>
      2. 定义接口
        在dubboapi 模块中java下,新建一个类com.hcb.Service.IHelloService
        package com.hcb.Service;

        public interface IHelloService {
        String SayHello(String name);
        }
      3. 实现 生产者模块
        在该模块的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容器中,相当于配置文件中的 <bean id="" class=""/>)
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@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

8a0f6f8856c17681544142379a7230b1.png


程序正常启动不报错

8486f8c88467af75e8147a2bab362b0e.png
      1. 消费者模块的配置
        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. 启动消费者

5ec68cba45eec4d37cea7bc39d1de13b.png

947558f6e12bb984f6e0055874e00179.png
        1. 测试
          浏览器中输入 http://localhost:8080/hello?name=%E6%A1%82%E6%9E%97
          正确显示出来

c22a12aa6bf0b4b59cfd8d22781d4a78.png

源码下载地址:

链接:https://pan.baidu.com/s/1WO2BQnsmIxP04mWNZin93A

提取码:5h0w

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值