gaojingsong http://doc.okbase.net/gaojingsong 【IOS隐藏键盘的方法】 http://doc.okbase.net/gaojingsong/archive/259029.html gaojingsong 2019/2/9 15:59:18
IOS开发中经常要用到输入框,默认情况下点击输入框就会弹出键盘,但是必须要实现输入框return的委托方法才能取消键盘的显示,对于用户体验来说很不友好,我们可以实现点击键盘以外的空白区域来将键盘隐藏,以下几种隐藏键盘的方法:


首先说明两种可以让键盘隐藏的Method:
1、[view endEditing:YES]  这个方法可以让整个view取消第一响应者,从而让所有控件的键盘隐藏。
2、[textFiled resignFirstResponder] 这个则是比较常用的让某个textFiled的键盘隐藏



- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
    
    //方法1:通过结束控制器view的编辑状态, 这种情况控制器容易获取
   [self.view endEditing:YES];
    
 
    //方法2:发送  注销第一响应者 消息给所有对象,用于不易获取控制器的情况
    [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
    
    //方法3:结束主窗口上的所有编辑
    [[UIApplication sharedApplication].keyWindow endEditing:YES];
}


]]>
【Oracle特殊字符的处理方式】 http://doc.okbase.net/gaojingsong/archive/258844.html gaojingsong 2019/2/2 16:13:52

plsql中还可以set define off来关闭特殊字符,还可以用show define来查看有些特殊定义的字符。

Oracle数据有个字段是存储url的,内容有特殊字符&,如果直接想执行查询或插入操作的话有问题,如下:

 

在plsql里边执行:

update userinfo set pageurl='test.php?page=1&pagesize=10' where id='test'

这条sql语句往数据库的pageurl字段放进去了一个url地址,但是执行的时候却并非那么理想,因为这其中有一个oracle的特殊字符,需要进行转义,那就是字符'&'.

怎么处理上例中的特殊字符?

两个办法:

 1) update userinfo set pageurl='test.php?page=1'||'&'||'pagesize=10' where id='test'

 2) update userinfo set pageurl='test.php?page=1'||chr(38)||'pagesize=10' where id='test'

我们使用了|| 连字符, chr(38)跟ASCII的字符转码是一致的。

 

方法一

select ascii('&') from dual;

select chr(38)    from dual; 

 

 

方法二

 

单引号('),将一个单引号变为两个单引号即可

 

insert into test(name) values('''')

 

 

select * from test where name like '%''%'

 

 

]]>
【VMware Fusion】介绍 http://doc.okbase.net/gaojingsong/archive/257248.html gaojingsong 2019/1/16 9:33:36
VMware Fusion Pro是一款适用于Mac操作系统的虚拟机软件。

在 Mac 上运行 Windows 应用程序时,可获得更接近 Mac 的使用体验。Fusion 7 更新了 Yosemite 界面,让您在处理 Windows 应用时感觉更加整洁和精致。Fusion 7 采用了 Yosemite 的关键设计理念,例如半透明的窗口、精简的工具栏和简化的 Dock 图标,因而可在管理虚拟机时增加更多空间。Fusion 7 还利用 Yosemite 的控制功能,以确保跨操作系统的一致体验,例如单击绿色“信号灯”时进入全屏模式,或者能够直接从 Spotlight 搜索并打开您的虚拟机或 Windows 应用。
Fusion 7 还可与 OS X Mavericks 和 OS X Mountain Lion 兼容

功能介绍
1、在 Mac 上可运行几乎任何操作系统
在 Mac 上运行 Windows 仅仅是一个开始。VMware Fusion 使您可以从数百个受支持操作系统之中进行选择,从比较少见的各个 Linux 发行版到最新的 Windows 10 版本,不一而足。

 
2、可针对任何平台进行开发和测试
借助 Fusion,可轻松地在 Mac 上测试几乎所有操作系统和应用。可在沙箱中构建和测试应用,同时可安全地共享本地源文件和文件夹。Fusion Pro 现在包含了一个 RESTful API,可用于与 Docker、Vagrant、Ansible、Chef 等新式开发工具集成,以将 VMware 的强大功能注入当今以敏捷性和 DevOps 为导向的生产管道。

 
3、可连接到 VMware vSphere
可安全地与 vSphere、ESXi 和 Workstation 服务器连接,以启动、控制和管理虚拟机 (VM) 和物理主机。借助通用 VMware 平台,可轻松地将虚拟机从 vSphere 数据中心传输到 Mac 桌面,然后在 Fusion 中运行。
4、可设计和演示复杂的解决方案
凭借能够在单台 Mac 上运行完整的虚拟云计算体系,解决方案架构师可实时演示其整个软件解决方案,还可通过安全回滚点返回到已知配置。通过在单台笔记本电脑上运行软件的所有组件来公开展示,可完整地表达您的软件之旅的来龙去脉。
5、运行本地企业桌面
通过禁用复制粘贴、拖放、共享文件夹以及对 USB 设备的访问权限,将企业桌面与自带设备隔离开来。运行加密且受密码保护的受限虚拟机,确保只有经过授权的用户才能与企业数据进行交互。
6、可以让 Windows 在 Mac 上自由运行
Fusion 将 Windows 体验与您喜爱的 Mac 进行了无缝融合。您可以灵活地将二者安全分离,也可以将它们融为一体来获取无缝体验。安装全新的操作系统(如 Windows 10),或轻松地将较为陈旧的 PC 转换为虚拟 PC。


 

 

 
  • 大小: 165.2 KB
  • 大小: 1.1 MB
  • 大小: 764.1 KB
  • 大小: 572.8 KB
  • 大小: 694.2 KB
]]> 【Charles】介绍 http://doc.okbase.net/gaojingsong/archive/257132.html gaojingsong 2019/1/15 9:45:01
Charles Mac是一款免费的HTTP信息抓包工具,可以有效地获取HTTP通信信息,主要用于网页的开发和调试等,Charles Mac可以看json和xml。但是其实用Google Chrome安装插件也是可以看到漂亮的格式的,可以检查HTMl,CSS和RSS内容是否标准。


Charles is a web proxy (HTTP Proxy / HTTP Monitor) that runs on your own computer. Your web browser (or any other Internet application) is then configured to access the Internet through Charles, and Charles is then able to record and display for you all of the data that is sent and received.
In Web and Internet development you are unable to see what is being sent and received between your web browser / client and the server. Without this visibility it is difficult and time-consuming to determine exactly where the fault is. Charles makes it easy to see what is happening, so you can quickly diagnose and fix problems.


Key Features
* SSL Proxying – view SSL requests and responses in plain text
* Bandwidth Throttling to simulate slower Internet connections including latency
* AJAX debugging – view XML and JSON requests and responses as a tree or as text
* AMF – view the contents of Flash Remoting / Flex Remoting messages as a tree
* Repeat requests to test back-end changes
* Edit requests to test different inputs
* Breakpoints to intercept and edit requests or responses
* Validate recorded HTML, CSS and RSS/atom responses using the W3C validator

Charles主要功能
* 支持SSL代理。可以截取分析SSL的请求。
* 支持流量控制。可以模拟慢速网络以及等待时间(latency)较长的请求。
* 支持AJAX调试。可以自动将json或xml数据格式化,方便查看。
* 支持AMF调试。可以将Flash Remoting 或 Flex Remoting信息格式化,方便查看。
* 支持重发网络请求,方便后端调试。
* 支持修改网络请求参数。
* 支持网络请求的截获并动态修改。
* 检查HTML,CSS和RSS内容是否符合W3C标准。
 
  • 大小: 113.3 KB
]]> IOS语法 http://doc.okbase.net/gaojingsong/archive/257006.html gaojingsong 2019/1/14 8:40:50
支持C语法
支持面向对象特性
兼容性好,可以同时在项目中使用OC、C++,也可以引入C、C++库文件
OC中没有命名空间机制,也没有包的概念,为了区分不同的类,在类名加前缀
OC中关键字表示都以@开头,用于区分C和C++的关键字,字符串也以@开头,如@public、@protected、@private


变量的作用域主要分为四种:
(1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。
(2)@protected (受保护的)只能在当前类和子类的对象方法中访问
(3)@private (私有的)只能在当前类的对象方法中才能直接访问
(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问


Foundation框架是包含常用一些结构体、枚举、类的一个框架,目的是使开发更快捷,
Foundation框架定义了一下功能:
基本的对象:NSNumber 、NSString 、NSDate 、
常用结构体和枚举:
基本集合:NSArray 、NSDictionary 、NSSet
内存管理:
操作系统服务:文件操作、URL、进程
归档和解档:
Foundation框架的特点:
1.都是以NS为前缀。
2.类都是继承自超类Object
]]>
【阿里之RocketMQ相关的命令行操作】 http://doc.okbase.net/gaojingsong/archive/256054.html gaojingsong 2016/10/20 10:17:46

一、启动RocketMQ

1)先启动NameServer

nohup sh mqnamesrv > ns.log 2>&1 &

实质启动的是com.alibaba.rocketmq.namesrv.NamesrvStartup对应的main()

备注runserver.sh 是一堆JVM参数

 

 

2)再启动Broker,默认端口9876

nohup sh mqbroker -n IP:Port > bk.log 2>&1 &

实质启动的是com.alibaba.rocketmq.broker.BrokerStartup对应的main()

备注runbroker.sh 是一堆JVM参数

 

总结:一步到位启动只需要运行 sh play.sh即可

[root@master bin]# sh play.sh

Start Name Server and Broker Successfully, 192.168.1.103:9876


 

 

二、查看帮助

[root@master bin]# sh mqadmin

The most commonly used mqadmin commands are:

   updateTopic          Update or create topic

   deleteTopic          Delete topic from broker and NameServer.

   updateSubGroup       Update or create subscription group

   deleteSubGroup       Delete subscription group from broker.

   updateBrokerConfig   Update broker's config

   topicRoute           Examine topic route info

   topicStatus          Examine topic Status info

   brokerStatus         Fetch broker runtime status data

   queryMsgById         Query Message by Id

   queryMsgByKey        Query Message by Key

   queryMsgByOffset     Query Message by offset

   printMsg             Print Message Detail

   producerConnection   Query producer's socket connection and client version

   consumerConnection   Query consumer's socket connection, client version and subscription

   consumerProgress     Query consumers's progress, speed

   consumerStatus       Query consumer's internal data structure

   cloneGroupOffset     clone offset from other group.

   clusterList          List all of clusters

   topicList            Fetch all topic list from name server

   updateKvConfig       Create or update KV config.

   deleteKvConfig       Delete KV config.

   wipeWritePerm        Wipe write perm of broker in all name server

   resetOffsetByTime    Reset consumer offset by timestamp(without client restart).

   updateOrderConf      Create or update or delete order conf

   cleanExpiredCQ       Clean expired ConsumeQueue on broker.

   startMonitoring      Start Monitoring

   checkMsg             Check Message Store

   statsAll             Topic and Consumer tps stats

   syncDocs             Synchronize wiki and issue to github.com

 

See 'mqadmin help <command>' for more information on a specific command.

 

 

1)查看Topic列表

[root@master bin]# sh mqadmin help topicList

usage: mqadmin topicList [-c] [-h] [-n <arg>]

 -c,--clusterModel        clusterModel

 -h,--help                Print help

 -n,--namesrvAddr <arg>   Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876

[root@master bin]# sh mqadmin topicList -n 192.168.1.103:9876

BenchmarkTest

TopicTest

DefaultCluster

SELF_TEST_TOPIC

%RETRY%please_rename_unique_group_name_4

TBW102

master

OFFSET_MOVED_EVENT

[root@master bin]# 

 

 

 

 

2)创建Topic

[root@master bin]# sh mqadmin help updateTopic

usage: mqadmin updateTopic [-b <arg>] [-c <arg>] [-h] [-n <arg>] [-o <arg>] [-p <arg>] [-r <arg>] [-s <arg>]

       -t <arg> [-u <arg>] [-w <arg>]

 -b,--brokerAddr <arg>       create topic to which broker

 -c,--clusterName <arg>      create topic to which cluster

 -h,--help                   Print help

 -n,--namesrvAddr <arg>      Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876

 -o,--order <arg>            set topic's order(true|false

 -p,--perm <arg>             set topic's permission(2|4|6), intro[2:R; 4:W; 6:RW]

 -r,--readQueueNums <arg>    set read queue nums

 -s,--hasUnitSub <arg>       has unit sub (true|false

 -t,--topic <arg>            topic name

 -u,--unit <arg>             is unit topic (true|false

 -w,--writeQueueNums <arg>   set write queue nums

[root@m bin]# sh mqadmin updateTopic -n 192.168.1.103:9876 -b 192.168.1.103:10911 -t gaojingsong  

create topic to 192.168.1.103:10911 success.

TopicConfig [topicName=gaojingsong, readQueueNums=8, writeQueueNums=8, perm=RW-, topicFilterType=SINGLE_TAG, topicSysFlag=0, order=false]

[root@master bin]# sh mqadmin topicList -n 192.168.1.103:9876

BenchmarkTest

TopicTest

DefaultCluster

SELF_TEST_TOPIC

%RETRY%please_rename_unique_group_name_4

TBW102

gaojingsong

master

OFFSET_MOVED_EVENT

 

 

 

 

 

3)统计Topic信息

[root@master bin]# sh mqadmin help topicStatus

usage: mqadmin topicStatus [-h] [-n <arg>] -t <arg>

 -h,--help                Print help

 -n,--namesrvAddr <arg>   Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876

 -t,--topic <arg>         topic name

[root@master bin]# sh mqadmin  topicStatus -n  192.168.1.103:9876 -t gaojingsong

#Broker Name                      #QID  #Min Offset           #Max Offset     #Last Updated

master                            0     0                     0                       

master                            1     0                     0                       

master                            2     0                     0                       

master                            3     0                     0                       

master                            4     0                     0                       

master                            5     0                     0                       

master                            6     0                     0                       

master                            7     0                     0                       

[root@master bin]# 

 

 

 

4)查看topicRoute信息

[root@master bin]# sh mqadmin help topicRoute

usage: mqadmin topicRoute [-h] [-n <arg>] -t <arg>

 -h,--help                Print help

 -n,--namesrvAddr <arg>   Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876

 -t,--topic <arg>         topic name

[root@master bin]# sh mqadmin  topicRoute     -n  192.168.1.103:9876 -t gaojingsong

{

        "brokerDatas":[

                {

                        "brokerAddrs":{0:"192.168.1.103:10911"

                        },

                        "brokerName":"master"

                }

        ],

        "filterServerTable":{},

        "queueDatas":[

                {

                        "brokerName":"master",

                        "perm":6,

                        "readQueueNums":8,

                        "topicSynFlag":0,

                        "writeQueueNums":8

                }

        ]

}

[root@master bin]# 

 

4)查看所有Topic信息

[root@master bin]# sh mqadmin help statsAll

usage: mqadmin statsAll [-a] [-h] [-n <arg>]

 -a,--activeTopic         print active topic only

 -h,--help                Print help

 -n,--namesrvAddr <arg>   Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876

[root@master bin]# sh mqadmin  statsAll    -n  192.168.1.103:9876

#Topic                #Consumer Group                         #InTPS     #OutTPS    #InMsg24Hour  #OutMsg24Hour

BenchmarkTest                                                             0.00                          0    NO_CONSUMER

TopicTest             please_rename_unique_group_name_        0.00        0.00              0              0

DefaultCluster                                                            0.00                          0    NO_CONSUMER

SELF_TEST_TOPIC                                                           0.00                          0    NO_CONSUMER

TBW102                                                                    0.00                          0    NO_CONSUMER

gaojingsong                                                               0.00                          0    NO_CONSUMER

master                                                                    0.00                          0    NO_CONSUMER

OFFSET_MOVED_EVENT                                                        0.00                          0    NO_CONSUMER

[root@master bin]# 

 

 

 

5)查看所有clusterList信息

[root@master bin]# sh mqadmin help clusterList

usage: mqadmin clusterList [-h] [-m] [-n <arg>]

 -h,--help                Print help

 -m,--moreStats           Print more stats

 -n,--namesrvAddr <arg>   Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876

[root@master bin]# sh mqadmin  clusterList   -n  192.168.1.103:9876

#Cluster Name     #Broker Name                      #BID  #Addr                  #Version                    #InTPS     #OutTPS

DefaultCluster    master                            0     192.168.1.103:10911    V3_2_6                        0.00        0.00

[root@master bin]# 

 

 

5)Delete相关的Topic

[root@master bin]# sh mqadmin help deleteTopic

usage: mqadmin deleteTopic -c <arg> [-h] [-n <arg>] -t <arg>

 -c,--clusterName <arg>   delete topic from which cluster

 -h,--help                Print help

 -n,--namesrvAddr <arg>   Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876

 -t,--topic <arg>         topic name

[root@master bin]# sh mqadmin  deleteTopic   -n  192.168.1.103:9876 -t TopicTest

usage: mqadmin deleteTopic -c <arg> [-h] [-n <arg>] -t <arg>

 -c,--clusterName <arg>   delete topic from which cluster

 -h,--help                Print help

 -n,--namesrvAddr <arg>   Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876

 -t,--topic <arg>         topic name

[root@master bin]# sh mqadmin  deleteTopic   -n  192.168.1.103:9876 -c  DefaultCluster  -t TopicTest

delete topic [TopicTest] from cluster [DefaultCluster] success.

delete topic [TopicTest] from NameServer success.

[root@master bin]# sh mqadmin  statsAll    -n  192.168.1.103:9876

#Topic                            #Consumer Group                       #InTPS     #OutTPS   #InMsg24Hour  #OutMsg24Hour

BenchmarkTest                                                             0.00                          0    NO_CONSUMER

DefaultCluster                                                            0.00                          0    NO_CONSUMER

SELF_TEST_TOPIC                                                           0.00                          0    NO_CONSUMER

TBW102                                                                    0.00                          0    NO_CONSUMER

gaojingsong                                                               0.00                          0    NO_CONSUMER

master                                                                    0.00                          0    NO_CONSUMER

OFFSET_MOVED_EVENT                                                        0.00                          0    NO_CONSUMER

[root@master bin]# 

 

  • 大小: 58.2 KB
]]> 【阿里之RocketMQ 集群部署事项】 http://doc.okbase.net/gaojingsong/archive/256053.html gaojingsong 2016/10/20 10:17:38

消息堆积

消息中间件的主要功能是异步解耦,还有个重要功能是挡住前端的数据洪峰,保证后端系统的稳定性,这就要求消息中间件具有一定的消息堆积能力,消息堆积分以下两种情况:

(1). 消息堆积在内存 Buffer,一旦超内存 Buffer,可以根据丢弃策略来丢弃消息,如 CORBA Notification

规范中描述。适合能容忍丢弃消息的业务,这种情况消息的堆积能力主要在亍内存 Buffer 大小,而且消息

堆积后,性能下降不会太大,因为内存中数据多少对于对外提供的访问能力影响有限。

(2). 消息堆积到持丽化存储系统中,例如 DB,KV 存储,文件记录形式。

当消息不能在内存 Cache 命中时,不可避免的访问磁盘,会产生大量读 IO,读 IO 的吞吐量直接决定了

消息堆积后的访问能力。

评估消息堆积能力主要有以下四点:

(1). 消息能堆积多少条,多少字节?即消息的堆积容量。

(2). 消息堆积后,収消息的吞吏量大小,是否会叐堆积影响?

(3). 消息堆积后,正常消费的 Consumer 是否会叐影响?

(4). 消息堆积后,访问堆积在磁盘的消息时,吞吏量有多大?

 

Push Consumer

Consumer 的一种,应用通常吐 Consumer 对象注册一个 Listener 接口,一旦收到消息,Consumer 对象立

刻回调 Listener 接口方法。

 

Pull Consumer

Consumer 的一种,应用通常主劢调用 Consumer 的拉消息方法从 Broker 拉消息,主劢权由应用控制。

 

广播消费

一条消息被多个 Consumer 消费,即使返些 Consumer 属亍同一个 Consumer Group,消息也会被 ConsumerGroup 中的每个 Consumer 都消费一次,广播消费中的 Consumer Group 概念可以讣为在消息划分方面无意义

在 CORBA Notification 规范中,消费方式都属于广播消费。

在 JMS 规范中,相当于 JMS publish/subscribe model

 

集群消费

一个 Consumer Group 中的 Consumer 实例平均分摊消费消息。例如某个 Topic 有 9 条消息,其中一个

Consumer Group 有 3 个实例(可能是 3 个迕程,或者 3 台机器),那举每个实例只消费其中的 3 条消息。

在 CORBA Notification 规范中,无此消费方式。

在 JMS 规范中,JMS point-to-point model 不乀类似,但是 RocketMQ 的集群消费功能大等亍 PTP 模型。

因为RocketMQ单个Consumer Group内的消费者类似亍PTP,但是一个Topic/Queue可以被多个Consumer

Group 消费。

 

 

 

RocketMQ 网络部署特点

Name Server 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。

 

 

Broker 部署相对复杂

1)Broker 分为 Master 与 Slave,

2)一个 Master 可以对应多个 Slave,但是一个 Slave 只能对应一个Master

3)Master与 Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义

4)BrokerId为 0 表示 Master,非 0 表示 Slave。

5)Master 也可以部署多个。

6)每个 Broker 与 Name Server 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 Name Server。



 

 

Producer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 取得 Topic 路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 収送心跳。Producer 完全无状态,可集群部署。

 

Consumer 与 Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server  取得 Topic 路由信息,并向提供 Topic 服务的 Master、Slave 建立长连接,且定时给 Master、Slave 发送心跳。Consumer既可以从 Master 订阅消息,也可以从 Slave 订阅消息,订阅规则由 Broker 配置决定。

 

 

 

 

RocketMQ 通信组件

RocketMQ 通信组件使用了 Netty-4.0.9.Final,在乀上做了简单的协议封装

 

 

客户端如何寻址

RocketMQ 有多种配置方式令客户端找到 Name Server, 然后通过 Name Server 再找到 Broker,分别如下,

优先级由高到低,高优先级会覆盖低优先级。

一、代码中定义 Name Server 地址

producer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");

或者

consumer.setNamesrvAddr("192.168.0.1:9876;192.168.0.2:9876");

 

二、Java 启动参数中定义 Name Server 地址

-Drocketmq.namesrv.addr=192.168.0.1:9876;192.168.0.2:9876

 

三、环境变量指定 Name Server 地址

export NAMESRV_ADDR=192.168.0.1:9876;192.168.0.2:9876

 

四、HTTP 静态服务器寻址(默认)

客户端启动后,会定时访问一个静态 HTTP 服务器,地址如下:

http://jmenv.tbsite.net:8080/rocketmq/nsaddr

返个 URL 的返回内容如下

192.168.0.1:9876;192.168.0.2:9876

 

客户端默认每隔 2 分钟访问一次返个 HTTP 服务器,并更新本地的 Name Server 地址。

URL 已经在代码中写死,可通过修改/etc/hosts 文件来改发要访问的服务器,例如在/etc/hosts 增加如下配置

10.232.22.67 jmenv.taobao.net

推荐使用 HTTP 静态服务器寻址方式,好处是客户端部署简单,丏 Name Server 集群可以热升级。

  • 大小: 80.6 KB
]]> 【erlang语言之RabbitMQ】 http://doc.okbase.net/gaojingsong/archive/253881.html gaojingsong 2016/10/13 8:10:43

What is RabbitMQ?

RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现

Robust messaging for applications

Easy to use

Runs on all major operating systems

Supports a huge number of developer platforms

Open source and commercially supported



 

RabbitMQ is officially supported on a number of operating systems and several languages. In addition, the RabbitMQ community has created numerous clients, adaptors and tools that we list here for your convenience.

 

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

 

RabbitMQ Java client and the API-guide

RabbitMQ JMS client (OSS)

Lyra, highly available RabbitMQ Java client

camel-rabbitmq, an Apache Camel component for interacting with RabbitMQ. This ships as part of Camel 2.12 or later.

Banyan, a RabbitMQ-backed message bus with a tree topology.

Spring Framework

 

Spring AMQP project for Java

RabbitMQ support in Spring XD

RabbitMQ support in Spring Integration

 

 

.NET

RabbitMQ .NET Client

EasyNetQ, an easy to use, opinionated .NET API for RabbitMQ

Restbus, a service-oriented framework for .NET

.NET NServiceBus client

RawRabbit, a higher-level client that targets ASP.NET vNext and supports .NET Core.

RabbitMQTools, PowerShell module containing cmdlets to manage RabbitMQ

 

Ruby

Bunny, a dead easy to use RabbitMQ Ruby client

March Hare, a JRuby RabbitMQ client

Sneakers, a fast background processing framework for Ruby and RabbitMQ

Hutch, a convensions-based framework for writing (Ruby) services that communicate over RabbitMQ.

Ruby RabbitMQ HTTP API client

Ruby RabbitMQ clients blog

Ruby RabbitMQ clients mailing list

 

Python

pika, a pure-Python AMQP 0-9-1 client (source code, API reference)

Celery, a distributed task queue for Django and pure Python

Haigha, an asynchronous AMQP 0-9-1 client based on libevent (the source code and docs are on github)

 

PHP

php-amqplib a pure PHP, fully featured RabbitMQ client

RabbitMqBundle incorporates RabbitMQ messaging with the Symfony2 web framework

PECL AMQP library built on top of the RabbitMQ C client

VorpalBunny a PHP client library using rabbitmq_jsonrpc_channel

Thumper a library of messaging patterns

CAMQP an extension for the Yii framework providing a gateway for RabbitMQ messaging

 

为什么使用Channel,而不是直接使用TCP连接?

  对于OS来说,建立和关闭TCP连接是有代价的,频繁的建立关闭TCP连接对于系统的性能有很大的影响,而且TCP的连接数也有限制,这也限制了系统处理高并发的能力。但是,在TCP连接中建立Channel是没有上述代价的。对于Producer或者Consumer来说,可以并发的使用多个Channel进行Publish或者Receive。有实验表明,1s的数据可以Publish10K的数据包。

  • 大小: 7.8 KB
]]> 【阿里之Druid数据库连接介绍】 http://doc.okbase.net/gaojingsong/archive/253879.html gaojingsong 2016/10/13 8:10:20

Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池。数据库连接池有很多选择,c3p、dhcp、proxool等,druid作为一名后起之秀,凭借其出色的性能,也逐渐印入了大家的眼帘。DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池(据说是目前最好的连接池,不知道速度有没有BoneCP快)。

 

Druid是一个JDBC组件,它包括三部分: 

DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 

DruidDataSource 高效可管理的数据库连接池。 

SQLParser 



 

 

Druid可以做什么? 

1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。 

2) 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。 

3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。 

4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。 

扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。

  • 大小: 14.6 KB
]]> 【MySQL数据库之Atlas介绍】 http://doc.okbase.net/gaojingsong/archive/253798.html gaojingsong 2016/10/12 9:12:57

一、官方介绍

.1)、Brief introduction

Atlas is a MySQL protocol-based database middleware project developed and maintained by infrastructure team of the Web platform Department in QIHU 360 SOFTWARE CO. LIMITED(NYSE:QIHU). It fixed lots of bugs and added lot of new functions on the basis of MySQL-Proxy 0.8.2. Currently the project has been widely applied in QIHU, many MySQL business has connected to the Atlas platform. The number of read and write requests forwarded by Atlas has reached billions.

 

2)、Major functions

a).Read/Write Splitting.

b).Load balancing and failover handling.

c).IP filtering.

d).Data sharding

e).DBA can online or offline the backend database server smoothly.

f).Remove the failed database server automatically.

g).Config file reload without downtime.

 

3)、The improvement of Atlas compared with Mysql-proxy

a、Rewrite all lua code with C, Lua is only used for management interface.

b、Rewrite the network model and the threading model.

c、Implement the connection pool.

d、Optimize the locking mechanism, performance improved immensely.

 

 

Atlas是由 Qihoo 360,  Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。

 

名字来源:

    Atlas,希腊神话中双肩撑天的巨人,普罗米修斯的兄弟,最高大强壮的神之一,因反抗宙斯失败而被罚顶天。我们期望这个系统能够脚踏后端DB,为前端应用撑起一片天。



 

主要功能:

* 读写分离

* 从库负载均衡

* IP过滤

* SQL语句黑白名单

* 自动分表

 

Atlas相对于官方MySQL-Proxy的优势

1.将主流程中所有Lua代码用C重写,Lua仅用于管理接口

2.重写网络模型、线程模型

3.实现了真正意义上的连接池

4.优化了锁机制,性能提高数十倍

 

 

 

Atlas配置文件示例

[mysql-proxy]

#带#号的为非必需的配置项目

#管理接口的用户名

admin-username = admin

#管理接口的密码

admin-password = passw0rd

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔

proxy-backend-addresses = 192.168.1.66:3306

#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔

proxy-read-only-backend-addresses = 192.168.1.64:3306,192.168.1.244:3306

#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!

#pwds = user1:+jKsgB3YAG8=, user2:GS+tr4TPgqc=

pwds = root:FYCDJMDki+SiquyHfJnWyQ==

#设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true

daemon = true

#设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true

keepalive = true

#工作线程数,对Atlas的性能有很大影响,可根据情况适当设置

event-threads = 64

#日志级别,分为message、warning、critical、error、debug五个级别

log-level = message

#日志存放的路径

log-path = /usr/local/mysql-proxy/log

#SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘,默认为OFF

#sql-log = OFF

#实例名称,用于同一台机器上多个Atlas实例间的区分

#instance = test

#Atlas监听的工作接口IP和端口

proxy-address = 0.0.0.0:1234

#Atlas监听的管理接口IP和端口

admin-address = 0.0.0.0:2345

#分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项

#tables = person.mt.id.3

#默认字符集,设置该项后客户端不再需要执行SET NAMES语句

#charset = utf8

#允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接

#client-ips = 127.0.0.1, 192.168.1

#Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置

#lvs-ips = 192.168.1.1

  • 大小: 171.7 KB
]]>