此次主要是對dubbo 和zookeeper的配置作個記錄,以便之後本身忘記了,或者踩的坑再次被踩html
zookeerer相似 springcloud中的Eureka都作爲註冊中心,用srpingboot創建三個項目生產者,消費者,公共接口,引用阿里的dubbo作爲rpc框架, 生產者負責實現接口的業務邏輯 而且在zookeeper註冊中心中註冊,同是消費者也鏈接zookeeper註冊中心進行消息調用 。java
優勢:linux
作爲分佈式服務架構,將核心業務抽取出來,穩定服務器,同時擴展方便 。能夠針對高併發數據進行快速合理的擴展和監控。提升集羣的利用率web
下載zookeeper 我用的版本是3.4.13spring
http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gzapache
linux服務器解壓api
下載之後放到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通
可是win7主機外面沒法ping通
這通常是由於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,能夠成功鏈接
用Ideal建立一個maven項目 ,在項目裏添加三個module
這三個項目分別是生產者dubboprovider 消費者dubboconsumer 接口duoboapi
建立一個maven的項目
輸入項目名字
下一步
進入項目界面
新建provider module
一樣的方法 建立其它兩個module,結果以下所示三個module建立完畢
配置主項目 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 註解
@SpringBootApplication 整合了三個註解。(默認屬性)@Configuration + @EnableAutoConfiguration + @ComponentScan
@Configuration 是和@Bean 把實體model翻譯成了xml的配置文件 ,使配置更簡單
@EnableAutoConfiguration 可以自動配置spring的上下文,試圖猜想和配置你想要的bean類,一般會自動根據你的類路徑和你的bean定義自動配置。
@EnableDubboConfiguration, 表示要開啓dubbo功能.
參考:http://www.javashuo.com/article/p-bwxrepcl-go.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
程序正常啓動不報錯
消費者模塊的配置
消費者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); } }
啓動消費者
測試
瀏覽器中輸入 http://localhost:8080/hello?name=%E6%A1%82%E6%9E%97
正確顯示出來
源碼下載地址: 連接:https://pan.baidu.com/s/1WO2BQnsmIxP04mWNZin93A 提取碼:5h0w