一、註冊中心-zookeeper
1.zookeeper
zookeeper可以在分佈式項目中承擔以下幾個功能:
1)註冊中心
2)存儲數據: 分佈式鎖
3)觀察者模式:做到多個分佈式服務器之間的數據同步
2.如何搭建zookeeper
要麼使用docker搭建,要麼使用原生的方式搭建。
1)在虛擬機上安裝jdk
上傳jdk的壓縮包到虛擬機的 /usr/local/java文件夾內
解壓縮
tar -zxvf jdk.....tar.gz
配置環境變量
vim /etc/profile
複製以下內容到該文件的末尾
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export JRE_HOME=/usr/local/java/jdk1.8.0_191/jre
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
2)安裝Zookeeper
上傳壓縮包到linux
解壓縮
3)獲得zoo.cfg配置文件
在zookeeper/conf文件夾內,修改zoo_sample.cfg中的內容後並重命名成zoo.cfg
4)如何使用zookeeper(做註冊中心)
注意: 要使用linux中的命令,必須兩種方式: 要麼./zkServer.sh 要麼是完整路徑:
/usr/local/zookeeper/zookeeper-3.4.14/bin/zkServer.sh
如何啓動zk
./zkServer.sh start
如何查看zk狀態
./zkServer.sh status
如何關閉zk
./zkServer.sh stop
二、使用Dubbo來實現服務間的調用
相關概念:
1) 工程: 包含多個項目的一個統稱
1.創建父工程
2.在父工程中創建一個接口項目
接口項目取消父依賴
在項目中創建具體的接口
3.在父工程中創建服務的提供者
編寫實現類,實現接口,並重寫方法,注意要把api的項目依賴進來。
4.在服務提供者項目中使用dubbo
1)創建xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
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">
2)編寫單元測試,引入配置文件,並啓動dubbo
注意:前提是要啓動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();
}
}
當看到這個結果,就表示服務發佈成功
5.創建服務消費者項目
1)引入依賴
 com.alibaba
 dubbo
 2.5.8
com.github.sgroschupf
zkclient
0.1
com.qf
my-dubbo-product-api
1.0.0-SNAPSHOT
2)編寫配置文件
<?xml version="1.0" encoding="UTF-8"?>
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">
3)在單元測試中去調用service
@Test
public void testInvoke(){
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(new String[]{"classpath:consumer.xml"});
IProductService productService = (IProductService) context.getBean("productService");
String s = productService.showProd();
System.out.println(s);
}
小結:
三、在Springboot項目中使用dubbo
1.方式一: 基於XML的整合方式
1)創建springboot的服務提供者項目
(1)引入依賴
com.alibaba.boot
dubbo-spring-boot-starter
0.2.0
(2)將xml配置文件放進resources中
(3)在springboot的入口類上打上註解:@ImportResource("classpath:provider.xml")
2)創建springboot的服務消費者項目
(1)引入依賴
com.alibaba.boot
dubbo-spring-boot-starter
0.2.0
(2)將xml配置文件放進resources中
(3)在springboot的入口類上打上註解:@ImportResource("classpath:consumer.xml")
(4)使用autowired將接口的實現類的對象自動注入進來,相當於是通過dubbo(zk)來提供服務的提供者的類。
@SpringBootTest
class MySpringBootProductConsumerApplicationTests {
@Autowired
private IProductService productService;
@Test
void contextLoads() {
System.out.println(productService.showProduct());
}
}
2.方式二:基於註解的整合方式
1)創建服務提供者項目
(1)引入依賴
(2)編寫application.yml文件,加入以下配置(本來在xml中的配置將寫在yml中)
server:
port: 8081
dubbo:
application:
name: product-service-provider
registry:
address: zookeeper://10.31.163.100:2181
protocol:
port: 20884
(3)編寫服務提供者類並實現接口,並在接口上打上註解:
@Component
@Service <==import com.alibaba.dubbo.config.annotation.Service;
(4)在入口類上打上註解
@EnableDubbo
2)創建服務消費者項目
(1)引入依賴
(2)編寫application.yml文件,加入以下配置(本來在xml中的配置將寫在yml中)
server:
port: 8082
dubbo:
application:
name: product-consumer
registry:
address: zookeeper://10.31.163.100:2181
(3)在需要用到服務提供者類的時候,使用@Reference註解
來自於com.alibaba.dubbo.config.annotation.Reference;
@SpringBootTest
class MySpringBootAnnotationProductConsumerApplicationTests {
@Reference
private IProductService productService;
@Test
void contextLoads() {
System.out.println(productService.showProduct());
}
}
(4)在入口類上打上註解
@EnableDubbo