zookeeper能夠在分佈式項目中承擔如下幾個功能:java
1)註冊中心linux
2)存儲數據: 分佈式鎖git
3)觀察者模式:作到多個分佈式服務器之間的數據同步github
要麼使用docker搭建,要麼使用原生的方式搭建。spring
tar -zxvf jdk.....tar.gzdocker
vim /etc/profilevim
複製如下內容到該文件的末尾api
export JAVA_HOME=/usr/local/java/jdk1.8.0_191springboot export JRE_HOME=/usr/local/java/jdk1.8.0_191/jrebash export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin |
:wq
source /etc/profile
在zookeeper/conf文件夾內,修改zoo_sample.cfg中的內容後並重命名成zoo.cfg
注意: 要使用linux中的命令,必須兩種方式: 要麼./zkServer.sh 要麼是完整路徑:
/usr/local/zookeeper/zookeeper-3.4.14/bin/zkServer.sh
./zkServer.sh start
./zkServer.sh status
./zkServer.sh stop
相關概念:
1) 工程: 包含多個項目的一個統稱
接口項目取消父依賴
在項目中建立具體的接口
編寫實現類,實現接口,並重寫方法,注意要把api的項目依賴進來。
<?
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> |
注意:前提是要啓動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();
}
}複製代碼 |
當看到這個結果,就表示服務發佈成功
<!--
引入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> |
<?
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> |
@Test
out
.println(s);} |
小結:
(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")
(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
out
.println(productService.showProduct());} } |
(1)引入依賴
(2)編寫application.yml文件,加入如下配置(原本在xml中的配置將寫在yml中)
server: |
(3)編寫服務提供者類並實現接口,並在接口上打上註解:
@Component
@Service <==import com.alibaba.dubbo.config.annotation.Service;
(4)在入口類上打上註解
@EnableDubbo
(1)引入依賴
(2)編寫application.yml文件,加入如下配置(原本在xml中的配置將寫在yml中)
server: |
(3)在須要用到服務提供者類的時候,使用@Reference註解
來自於com.alibaba.dubbo.config.annotation.Reference;複製代碼
@SpringBootTest
out
.println(productService.showProduct());} } |
(4)在入口類上打上註解
@EnableDubbo