科技新闻

docker分布式部署rabbitmq集群

*爱你&永不变心* 提交于 2020-03-09 02:53:31
rabbitmq是目前消息队列比较热门的使用技术,这里它和其他几类技术的对比本文就不做赘述了。本文主要讲述在Docker下如何部署rabbitmq分布式集群。本文不讲述docker及rabbitmq镜像的安装下载。 一、前期准备 本文以两台服务器作为示例。服务器A的IP为192.168.1.10,服务器B的IP为192.168.1.11。为了后期管理更多docker配置方便,分别在A,B两台服务器里面新建docker目录,其结构示例如下: cd /home/user/ mkdir docker cd docker mkdir rabbitmq cd rabbitmq touch hosts vim hosts 进入刚创建好的hosts文件配置服务器映射,编辑好以后wq保存退出 192.168.1.10 rabbit1 192.168.1.11 rabbit2 二、在A服务器中启动已经下载好的rabbitmq镜像 docker run -d --privileged=true --net host --hostname rabbit1 --name rabbitmq1 -v /home/user/docker/rabbitmq:/var/lib/rabbitmq -v /home/user/docker/rabbitmq/hosts:/etc/hosts -e RABBITMQ

RabbitMQ笔记

依然范特西╮ 提交于 2020-03-09 02:03:58
##目录 简单实现 消息调度 循环调度 公平调度 消息确认 消息持久化 交换机 - 消息多路分发 交换机简介 匿名交换机 扇形交换机 直连交换机 ##简单实现 使用python语言进行开发,先下载pika库 // send . py import pika connection = pika . BlockingConnection ( pika . ConnectionParameters ( host = "localhost" ) ) channel = connection . channel ( ) channel . basic_publish ( exchange = '' , routing_key = 'hello' , body = 'Hello RabbitMQ' ) print ( "send successful" ) connection . close ( ) // recive import pika conneciton = pika . BlockingConnection ( pika . ConnectionParameters ( host = "localhost" ) ) channel = connetion . channel ( ) channel . queue_declare ( queue = "hello" ) def

关于Socket服务器与客户端双向通信时碰到的一个坑

北慕城南 提交于 2020-03-08 22:44:39
学习Socket时, 想实现一个读写分离,能够实时接收和发送消息的socket,却一直发送消息出去却不能打印出来。 客户端发送消息出去后。 客户端却不能打印出消息,客户端也不能打印出消息。 一直冥思苦想,一直到不到问题所在。 直到 发现 PrintWriter将 write 方法 改为 println后成功打印出消息。 最后 附上源码 客户端: 1 package my.socket; 2 3 import java.io.*; 4 import java.net.Socket; 5 6 public class SocketClient { 7 8 public static void main(String[] args) throws IOException { 9 Socket socket = new Socket("localhost",55532); 10 11 ReadSocketThread readSocketThread = new ReadSocketThread(socket); 12 readSocketThread.start(); 13 14 WriteSocketThread writeSocketThread = new WriteSocketThread(socket); 15 writeSocketThread.start(); 16 17

redis知识点

时光毁灭记忆、已成空白 提交于 2020-03-08 21:38:20
1 redis特点   内存数据库,读写速度快,被应用于缓存。   数据类型丰富,支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案。   丰富的特性:缓存,消息,过期,自动删除 2 数据类型:   hash: k-v集合,适用于存储对象。 由于组合式的压缩,内存利用率更高。   字符串:一个键最大能存 512MB   列表:按照插入顺序排序。      异步队列: rpush为生产消息, lpop为消费消息。但是消费者下线时,生产消息会丢失。   set集合: string类型的无序集合,通过哈希表实现,增删查的复杂度是 O( 1)。   zset:有序集合,且不重复。 3 存储结构:   redis通讯协议 RESP格式的命令文本存储。是 redis客户端和服务端之前使用的一种通讯协议。特点:实现简单、快速解析、可读性好。 4 redis做缓存的原因   高性能:   a 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。b 将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。c 如果数据库中的对应数据改变的之后, 同步改变缓存中相应的数据即可 !   高并发:   直接操作缓存能够承受的请求是远远大于直接访问数据库的

ios 消息跳转处理

折月煮酒 提交于 2020-03-08 19:23:17
一.消息转发流程 当向Objective-C对象发送一个消息,但runtime在当前类及父类中找不到此selector对应的方法时,消息转发(message forwarding)流程开始启动。 动态方法解析(Dynamic Method Resolution或Lazy method resolution) 向当前类(Class)发送 resolveInstanceMethod: (对于类方法则为 resolveClassMethod: )消息,如果返回YES,则系统认为请求的方法已经加入到了,则会重新发送消息。 快速转发路径(Fast forwarding path) 若果当前target实现了 forwardingTargetForSelector: 方法,则调用此方法。如果此方法返回除nil和self的其他对象,则向返回对象重新发送消息。 慢速转发路径(Normal forwarding path) 首先runtime发送 methodSignatureForSelector: 消息查看Selector对应的方法签名,即参数与返回值的类型信息。如果有方法签名返回,runtime则根据方法签名创建描述该消息的 NSInvocation ,向当前对象发送 forwardInvocation: 消息,以创建的NSInvocation对象作为参数

OpenStack中RabbitMQ RPC 调用研究

浪尽此生 提交于 2020-03-08 18:43:53
这两天研究了一下,OpenStack的工作原理,并着重调研了一下RabbitMQ在OpenStack中扮演的角色。 首先,OpenStack中模块Volume Control、Network Controller、ComputeController以及Scheduler之间的通信是通过AMQP协议实现,消息由RabbitMQ作为中间件转发,以一种RPC(Remote Process Call)的方式进行的。具体可见图 其中用户在dashboard中进行的操作通过Nova.api、Glance.api等调用Volume、Network、ComputeController等模块,上图中是一个逻辑结构,可以看出这种基于RPC的松耦合调用可以不用关心某些模块是否在本机,Openstack的多个模块间可以轻易以分布式的方式解决。 以Nova为例,每一个Nova服务都会在初期建立两个队列,两个队列同时与相同的exchange(名称叫做Nova、类型为Topic)绑定,但是二者的RoutingKey不同也就是Topic不同,格式分别为NODE-TYPE.NODE-ID以及NODE-TYPE,其二者功能也有所不同,并且由于采用RPC结构,所以当操作完成,结果会以Direct的方式回复给服务调用方。该流程是RabbitMQ在Openstack中实现的核心思想,具体图示如下:

OpenStack中RabbitMQ RPC 调用研究

拥有回忆 提交于 2020-03-08 18:42:42
这两天研究了一下,OpenStack的工作原理,并着重调研了一下RabbitMQ在OpenStack中扮演的角色。 首先,OpenStack中模块Volume Control、Network Controller、ComputeController以及Scheduler之间的通信是通过AMQP协议实现,消息由RabbitMQ作为中间件转发,以一种RPC(Remote Process Call)的方式进行的。具体可见图 其中用户在dashboard中进行的操作通过Nova.api、Glance.api等调用Volume、Network、ComputeController等模块,上图中是一个逻辑结构,可以看出这种基于RPC的松耦合调用可以不用关心某些模块是否在本机,Openstack的多个模块间可以轻易以分布式的方式解决。 以Nova为例,每一个Nova服务都会在初期建立两个队列,两个队列同时与相同的exchange(名称叫做Nova、类型为Topic)绑定,但是二者的RoutingKey不同也就是Topic不同,格式分别为NODE-TYPE.NODE-ID以及NODE-TYPE,其二者功能也有所不同,并且由于采用RPC结构,所以当操作完成,结果会以Direct的方式回复给服务调用方。该流程是RabbitMQ在Openstack中实现的核心思想,具体图示如下:

NOVA源码分析——NOVA中的RabbitMQ解析

瘦欲@ 提交于 2020-03-08 18:41:47
本篇文章是由本人阅读NOVA源码过程中的心得、 RabbitMQ 的官方文档以及网上的一些资料整理总结而成的,也为了方便以后对这部分内容的复习。 NOVA是OpenStack系统的核心模块,主要负责虚拟机实例的生命周期管理、网络管理(前几个版本)、存储卷管理(前几个版本)、用户管理以及其他相关云平台管理功能,在能力上类似于Amazon EC2和Rackspace Cloud Servers。 消息队列(Queue )与数据库(Database) 作为Nova总体架构中的两个重要组成部分,二者通过系统内消息传递和信息共享的方式实现任务之间、模块之间、接口之间的异步部署,在系统层面大大简化了复杂任务的调度流程与模式,是整个OpenStack Nova系统的核心功能模块。终端用户(DevOps、Developers和其他OpenStack组件)主要通过Nova API实现与OpenStack系统的互动,同时Nova守护进程之间通过消息队列和数据库来交换信息以执行API请求,完成终端用户的云服务请求。 Nova采用无共享、基于消息的灵活架构,意味着Nova的组件有多种安装方式,可以将每个Nova-Service模块单独安装在一台服务器上,同时也可以根据业务需求将多个模块组合安装在多台服务器上。 1. RabbitMQ OpenStack Nova系统目前主要采用 RabbitMQ

Android线程通信

廉价感情. 提交于 2020-03-08 18:11:38
摘要   andriod提供了 Handler 和 Looper 来满足线程间的通信。例如一个子线程从网络上下载了一副图片,当它下载完成后会发送消息给主线程,这个消息是通过绑定在主线程的Handler来传递的。 正文 图解: 代码示例: /** * @author allin.dev * http://allin.cnblogs.com */ public class MainThread extends Activity { private static final String TAG = "MainThread"; private Handler mMainHandler, mChildHandler; private TextView info; private Button msgBtn; @Override public void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); setContentView( R.layout.main ); info = (TextView) findViewById( R.id.info ); msgBtn = (Button) findViewById( R.id.msgBtn ); mMainHandler = new

python类的学习:前言

爱⌒轻易说出口 提交于 2020-03-08 17:58:15
前言 在面向对象程序设计中,把数据以及对数据的操作封装在一起,组成一个整体(对象),不同对象之间通过消息机制来通信或者同步。对于相同类型的对象进行分类、抽象后,得出共同的特征而形成了类。 创建类时用变量形式表示对象特征的成员称为数据成员,用函数形式表示对象行为的成员称为成员方法,数据成员与成员方法统称为类的成员。 以设计好的类为基类,可以继承得到派生类,缩短开发周期,实现代码的复用。 派生类中还可以对基类继承而来的某些行为进行重新实现,从而是得基类的某个同名方法在不同派生类中的行为不同,体现出一定的多态特性。 封装、继承、多态是面向对象程序设计的三个要素。 本章学习目标: 掌握类的定义语法 掌握对象的创建语法 理解数据成员与成员方法的区别 理解私有成员与公有成员的区别 理解属性的工作原理 了解继承的基本概念 了解特殊方法的概念与工作原理 来源: CSDN 作者: weixin_45700973 链接: https://blog.csdn.net/weixin_45700973/article/details/104729350