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();
} }

Docker+Dubbo+Zookeeper实现RPC远程调用的更多相关文章

  1. dubbo集成zookeeper rpc远程调用

    注:下面使用dubbo依赖的是zookeeper注册中心,这里没有详细的介绍.在配置之前,请自行准备好zookeeper环境. 后续如果写zookeeper的配置会补放链接 添加Gradle依赖 co ...

  2. 測试JSON RPC远程调用(JSONclient)

    #include <string> #include <iostream> #include <curl/curl.h> /* 标题:JSonclient Auth ...

  3. 使用Socket&反射&Java流操作进行方法的远程调用(模拟RPC远程调用)

    写在前面 阅读本文首先得具备基本的Socket.反射.Java流操作的基本API使用知识:否则本文你可能看不懂... 服务端的端口监听 进行远程调用,那就必须得有客户端和服务端.服务端负责提供服务,客 ...

  4. 从0到1:全面理解RPC远程调用

    上一篇关于 WSGI 的硬核长文,不知道有多少同学,能够从头看到尾的,不管你们有没有看得很过瘾,反正我是写得很爽,总有一种将一样知识吃透了的错觉. 今天我又给自己挖坑了,打算将 rpc 远程调用的知识 ...

  5. Openstack Nova 源码分析 — RPC 远程调用过程

    目录 目录 Nova Project Services Project 的程序入口 setuppy Nova中RPC远程过程调用 nova-compute RPC API的实现 novacompute ...

  6. rpc远程调用开发

    RPC即远程过程调用,适用于集群管理,集群节点就是RPCServer,而我们发起远程调用的web服务器就是RPCClient.所以是少数rpcClient(可能一个)对多个RPCServer(集群节点 ...

  7. RPC远程调用——Dubbo

    1.安装Zookeeper a.下载Zookeeper后解压 b.进入根目录下的conf文件夹,将zoo_sample.cfg改成bak文件,并复制一个修改为zoo.cfg,修改相关配置 # The ...

  8. 详解RPC远程调用和消息队列MQ的区别

    PC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制. RPC框架 知名度较高的有Thrift(FB的).dubbo(阿里的). RP ...

  9. go语言net包rpc远程调用的使用

    一.基于http的RPC 服务端: package main; import ( "net/rpc" "net/http" "log" ) ...

随机推荐

  1. [CODEVS1537] 血色先锋队 - BFS

    题目描述 Description 巫妖王的天灾军团终于卷土重来,血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团,以及一切沾有亡灵气息的生物.孤立于联盟和部落的血色先锋军很快就遭到了天灾军团的重重 ...

  2. 懒要懒到底,能自动的就不要手动,Hibernate正向工程完成Oracle数据库到MySql数据库转换(含字段转换、注释)

    需求描述 需求是这样的:因为我们目前的一个老项目是Oracle数据库的,这个库呢,数据库是没有注释的,而且字段名和表名都是大写风格,比如 在代码层面的po呢,以前也是没有任何注释的,但是经过这些年,大 ...

  3. Halcon一日一练:获取孔位

    本例程是用于获取安装螺丝孔在图像中对应的坐标位置,并显示该坐标位,如上图所示. read_image(Image,'rim.png')//读取图像 dev_close_window()//关闭窗口 g ...

  4. 小白学 Python(6):基础运算符(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  5. 学习python3高阶函数笔记和demo

    python的高阶函数的定义是:一个函数接收另一个函数作为参数,这种函数就称之为高阶函数 举一个最简单的例子: def text(a,b,c): return c(a)+c(b) print( tex ...

  6. Spring Cloud 网关服务 zuul 二

    有一点上篇文章忘了 讲述,nacos的加载优先级别最高.服务启动优先拉去配置信息.所以上一篇服务搭建我没有讲述在nacos 中心创建的配置文件 可以看到服务端口和注册中心都在配置文件中配置化 属性信息 ...

  7. 字符编码 + python2和python3的编码区别(day08整理)

    目录 昨日回顾 二十三.元组内置方法 二十四.散列表 二十五.字典内置方法 二十六.集合内置方法 二十七.深浅拷贝 拷贝 浅拷贝 深拷贝 今日内容 二十八.字符编码 1.文本编辑器存储信息的过程 2. ...

  8. Apollo学习笔记(一):canbus模块与车辆底盘之间的CAN数据传输过程

    Apollo学习笔记(一):canbus模块与车辆底盘之间的CAN数据传输过程 博主现在从车载自组网信道分配和多跳路由转向了自动驾驶,没啥经验,想快些做出来个Demo还是得站在巨人的肩膀上才行,我选择 ...

  9. fenby C语言 P31 使用数组的指针

    ++p代表p=p+1; #include <stdio.h> int main(void){ int a[5],i; for(i=0;i<5;i++) *(a+i)=1; print ...

  10. Java ArrayList底层实现原理源码详细分析Jdk8

    简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用 ...