一、注冊中心-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)編寫配置檔案
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的服務消費者項目
(3)在springboot的入口類上打上注解:@ImportResource("classpath:consumer.xml")
(4)使用autowired将接口的實作類的對象自動注入進來,相當于是通過dubbo(zk)來提供服務的提供者的類。
@SpringBootTest
class MySpringBootProductConsumerApplicationTests {
@Autowired
private IProductService productService;
void contextLoads() {
System.out.println(productService.showProduct());
2.方式二:基于注解的整合方式
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)建立服務消費者項目
port: 8082
name: product-consumer
(3)在需要用到服務提供者類的時候,使用@Reference注解
來自于com.alibaba.dubbo.config.annotation.Reference;
class MySpringBootAnnotationProductConsumerApplicationTests {
@Reference