Docker+Dubbo+Zookeeper實現RPC遠程調用


Docker+Dubbo+Zookeeper

1.安裝Docker

1.1卸載舊版本的Docker

//如果Docker處於與運行狀態  未運行可跳過
[root@MrADiao ~]# systemctl stop docker

//如果Docker設置了開機自啟 需先刪除 沒有設置可自行跳過
[root@MrADiao ~]# systemctl diable docker
//卸載docker-ce
[root@MrADiao ~]# yum remove docker-ce

//刪除注冊表 文件夾
[root@MrADiao ~]# rm -rf /var/lib/docker

1.2.安裝新版本的Docker

1、檢查內核版本,必須是3.10及以上
[root@MrADiao ~]# uname -r

2.安裝依賴包
[root@MrADiao ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

3.添加docker軟件包源
[root@MrADiao ~]#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4、安裝docker
[root@MrADiao ~]# yum install docker-ce

5、輸入y確認安裝

6.查看是否安裝成功
[root@MrADiao ~]# docker version
或者
[root@MrADiao ~]# docker -v

7、啟動docker
[root@MrADiao ~]# systemctl start docker 

8.設置docker開機自啟
[root@MrADiao ~]#systemctl enable docker

可參考Docker官方文檔:https://docs.docker.com/install/linux/docker-ce/centos/

1.3.docker常用命令

  • 鏡像操作命令

操作 命令 說明
檢索 docker search 關鍵字 eg:docker search redis 我們經常去docker hub上檢索鏡像的詳細信息,如鏡像的TAG。
拉取 docker pull 鏡像名:tag :tag是可選的,tag表示標簽,多為軟件的版本,默認是latest
列表 docker images 查看所有本地鏡像
刪除 docker rmi image-id 刪除指定的本地鏡像
  • 容器操作命令

操作 命令 說明
運行 docker run --name container-name -d image-nameeg:docker run –name myredis –d redis --name:自定義容器名
-d:后台運行
image-name:指定鏡像模板
列表 docker ps 查看運行中的容; 加上-a;可以查看所有容器
停止 docker stop 容器Id 刪除指定的容器
啟動 docker start 容器id 啟動容器
刪除 docker rm 容器id 刪除一個容器
端口映射 docker run -d -p 8888:8080 tomcat -d:后台運行
-p: 將主機的端口映射到容器的一個端口 主機端口:容器內部的端口
容器日志 docker logs container-name/container-id 查看容器的日志

2.Docker中安裝Zookeeper

2.1.從Docker Hub中獲取zookeeper鏡像

[root@MrADiao ~]# docker pull zookeeper

2.2.啟動zookeeper

[root@MrADiao ~]# docker run --name myzookeeper -p 2181:2181  --restart always -d zookeeper  //-p指定端口啟動   :前的端口是linux虛擬機的端口  :后的端口是指docker容器的端口  2181:2181意思是指  把linux系統的2181端口映射到docker容器的2181端口

3.zookeeper+dubbo簡單代碼實現

3.1創建服務端項目(provider-ticket)

首先創建一個SpringBoot項目

3.1.1Pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.adiao</groupId>
	<artifactId>provider-ticket</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>provider-ticket</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.12.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>0.1.0</version>
		</dependency>

		<!--引入zookeeper的客戶端工具-->
		<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>


		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

3.1.2 application.properties
dubbo.application.name=provider-ticket

dubbo.registry.address=zookeeper://部署zookeeper服務器IP:2181

dubbo.scan.base-packages=com.adiao.ticket.service

server.port=8081
3.1.3創建一個TicketService
package com.adiao.ticket.service;

public interface TicketService {

    public String getTicket();
}

3.1.4實現TicketService
package com.adiao.ticket.service;

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;


@Component
@Service 
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "《厲害了,我的國》";
    }
}

注意:@Service注解是dubbo下的,作用是將服務發布出去

3.2創建調用方

3.2.1創建調用方項目(consumer-user)

首先創建一個SpringBoot項目

3.2.2 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.adiao</groupId>
	<artifactId>consumer-user</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>consumer-user</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.12.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>com.alibaba.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
			<version>0.1.0</version>
		</dependency>

		<!--引入zookeeper的客戶端工具-->
		<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.1</version>
		</dependency>


		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

3.2.3application.properties
dubbo.application.name=consumer-user

dubbo.registry.address=zookeeper://部署zookeeper服務器IP:2181

server.port=8082


3.2.3 創建與被調用放一樣的Service
package com.adiao.ticket.service;

public interface TicketService {

    public String getTicket();
}
3.2.4創建一個調用方自己的Service
package com.adiao.user.service;


import com.alibaba.dubbo.config.annotation.Reference;
import com.adiao.ticket.service.TicketService;
import org.springframework.stereotype.Service;

@Service
public class UserService{

    @Reference
    TicketService ticketService;

    public void hello(){
        String ticket = ticketService.getTicket();
        System.out.println("買到票了:"+ticket);
    }
}

3.3測試

在main/test/java/下創建測試類,一定要確保被調用方 也就是provider-ticket處於運行狀態

package com.adiao.user;

import com.adiao.user.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ConsumerUserApplicationTests {

	@Autowired
	UserService userService;

	@Test
	public void contextLoads() {

		userService.hello();
	}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM