![f84c4c339d78423c640a8d7908c560f1.png](https://i-blog.csdnimg.cn/blog_migrate/df1fa2c9cb1bb12319905f072b34477f.jpeg)
dubbo zookeeper
这次主要是对dubbo 和zookeeper的配置做个记录,以便以后自己忘记了,或者踩的坑再次被踩
快速阅读
zookeerer类似 springcloud中的Eureka都做为注册中心,用srpingboot建立三个项目生产者,消费者,公共接口,引用阿里的dubbo做为rpc框架, 生产者负责实现接口的业务逻辑 并且在zookeeper注册中心中注册,同是消费者也连接zookeeper注册中心进行消息调用 。
优点:
做为分布式服务架构,将核心业务抽取出来,稳定服务器,同时扩展方便 。可以针对高并发数据进行快速合理的扩展和监控。提高集群的利用率
zookeeper的配置
- 下载zookeeper 我用的版本是3.4.13http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
- linux服务器解压
下载以后放到linux服务器上直接解压就可以了。
[root@bogon hcb]# tar zxvf zookeeper-3.4.13.tar.gz -C /usr - 备份zoo.cfg配置文件
直接把zoo_sample.cfg改名就可以了。o
mv /usr/zookeeper-3.4.13/conf/zoo_sample.cfg zoo.cfg - 启动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. - 查看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
- 检查是否可以正常使用
用telnet 来测试
telnet 192.168.159.131 2181
虚拟机的linux可以ping通
![87af071148ab048f632e0fecae278943.png](https://i-blog.csdnimg.cn/blog_migrate/8c4b024c00f9a649d909c7ab744b9dfa.jpeg)
但是win7主机外面无法ping通
![f220edb9eecdf895483fb30290bb9943.png](https://i-blog.csdnimg.cn/blog_migrate/51d845fa5987a4d16e5ef00c0b95890e.jpeg)
这一般是因为linux的防火墙问题,直接关闭就可以了
- 关闭linux 防火墙
- 检查防火墙状态,
显示状态为running表示防火墙正在运行
[root@bogon bin]# firewall-cmd --state
running - 关闭linux防火墙,并再次查询状态
[root@bogon bin]# systemctl stop firewalld.service
[root@bogon bin]# firewall-cmd --state
not running - 禁止开机启动防火墙
[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](https://i-blog.csdnimg.cn/blog_migrate/33d5c2cf568fc06ae7ffe820acb262e2.jpeg)
创建spring boot项目进行连接zookeeper
-
-
- 用Ideal创建一个maven项目 ,在项目里添加三个module
这三个项目分别是生产者dubboprovider 消费者dubboconsumer 接口duoboapi
创建一个maven的项目
- 用Ideal创建一个maven项目 ,在项目里添加三个module
-
![35cf36f51fdbb98f20e1de4632dba935.png](https://i-blog.csdnimg.cn/blog_migrate/5f2bc4edc12a11d799ca75c78e57c6bc.jpeg)
输入项目名字
![00fb971e7af693e546361ade28180d25.png](https://i-blog.csdnimg.cn/blog_migrate/932c7674b2cd6570b75fd82be6fe4c04.jpeg)
下一步
![40d9ebf024767c71d97e5f5ed6100e7f.png](https://i-blog.csdnimg.cn/blog_migrate/da8784d88bbeed1bda4249d481065dd0.jpeg)
进入项目界面
![90a6da0bb39ee22f240ccd1e19dab5cc.png](https://i-blog.csdnimg.cn/blog_migrate/8f6edd79069eb7b33afdc595ad65fc7e.jpeg)
新建provider module
![621b6c58c5a8dda85a4cae7ba2761aca.png](https://i-blog.csdnimg.cn/blog_migrate/7b7f176e29eab76a3bc913839e872b31.jpeg)
![14eaacf24315868dfcc80bea723d6a34.png](https://i-blog.csdnimg.cn/blog_migrate/9a2e03a9c7ccf02306a507a61be32a0d.jpeg)
![46c845bbbdf3974a9b24b1109c2b7b7f.png](https://i-blog.csdnimg.cn/blog_migrate/e8c76ccc713db726a7a53707b42db454.jpeg)
同样的方法 创建其它两个module,结果如下所示三个module创建完毕
![774a94b950a86611d9b8af1f937a02fb.png](https://i-blog.csdnimg.cn/blog_migrate/e51129a3e924e9615bd4b7a9fc6d0da5.jpeg)
-
-
- 配置主项目 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> - 定义接口
在dubboapi 模块中java下,新建一个类com.hcb.Service.IHelloService
package com.hcb.Service;
public interface IHelloService {
String SayHello(String name);
}
- 实现 生产者模块
在该模块的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 注解
- 配置主项目 pom.xml
-
- @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](https://i-blog.csdnimg.cn/blog_migrate/213d1cc698996459ce6d7dc727b59792.jpeg)
程序正常启动不报错
![8486f8c88467af75e8147a2bab362b0e.png](https://i-blog.csdnimg.cn/blog_migrate/3f87d938f7f5855ea8a1d85a4b680be3.jpeg)
-
-
- 消费者模块的配置
- 消费者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> - 建立配置文件 和provider一样,名字换成consumer就可以
spring.dubbo.appname=dubboconsumer
spring.dubbo.registry=zookeeper://192.168.159.131:2181 - 建立启动类
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);
}
}
- 建立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);
}
}
- 启动消费者
- 消费者consume中pom.xml的配置 ,
- 消费者模块的配置
-
![5ec68cba45eec4d37cea7bc39d1de13b.png](https://i-blog.csdnimg.cn/blog_migrate/a5294704dc0fe0cb36199da522f404d1.jpeg)
![947558f6e12bb984f6e0055874e00179.png](https://i-blog.csdnimg.cn/blog_migrate/f204b8c23c618bcc1f851021b4172504.jpeg)
-
-
-
- 测试
浏览器中输入 http://localhost:8080/hello?name=%E6%A1%82%E6%9E%97
正确显示出来
- 测试
-
-
![c22a12aa6bf0b4b59cfd8d22781d4a78.png](https://i-blog.csdnimg.cn/blog_migrate/dbe12297e992d331e255f947571f09d8.jpeg)
源码下载地址:
链接:https://pan.baidu.com/s/1WO2BQnsmIxP04mWNZin93A
提取码:5h0w