环境

[root@node1 ~]# cat /etc/redhat-release
CentOS Linux release 7.1. (Core)
[root@node1 ~]# uname -r
3.10.-.el7.x86_64
10.0.0.20 node1 ram节点  (rabbitmq )
10.0.0.21 node2 disc节点 (rabbitmq + haproxy + keepalived )
10.0.0.22 node3 ram节点 (rabbitmq + haproxy + keepalived )

搭建(在所有节点执行)

添加EPEL源

[root@node1 ~]# rpm -Uvh https://dl.Fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

添加Erlang

[root@node1 ~]# rpm -Uvh http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm

安装RabbitMQ

[root@node1 ~]# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm
[root@node1 ~]# rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
[root@node1 ~]# yum install -y rabbitmq-server-3.6.-.el7.noarch.rpm

启动服务

[root@node1 ~]# systemctl enable rabbitmq-server.service
[root@node1 ~]# systemctl start rabbitmq-server.service

查看服务状态

[root@node1 ~]# systemctl status rabbitmq-server 

查看端口监听状态 5672为集群间通信端口,15672为web端管理端口

[root@node1 ~]# netstat -lnutp

查看配置路径

[root@node1 ~]# cd /var/log/rabbitmq/
[root@node1 rabbitmq]# vim rabbit\@node2.log

=INFO REPORT==== -Aug-:::: ===
Starting RabbitMQ 3.6. on Erlang R16B03-
Copyright (C) - Pivotal Software, Inc.
Licensed under the MPL. See http://www.rabbitmq.com/ =INFO REPORT==== -Aug-:::: ===
node : rabbit@node2
home dir : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config (not found)
cookie hash : vNIydXbvZSku+QwtRGImSQ==
log : /var/log/rabbitmq/rabbit@node2.log
sasl log : /var/log/rabbitmq/rabbit@node2-sasl.log
database dir : /var/lib/rabbitmq/mnesia/rabbit@node2

根据上面的提示发现没有 rabbitmq.config 文件,可以自己创建

[root@node1 rabbitmq]# cd /etc/rabbitmq/
[root@node1 rabbitmq]# vim rabbitmq.config

编辑内容如下

[{rabbit, [{loopback_users, []}]}].

这里的意思是开放使用,rabbitmq默认创建的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置 

保存配置后重启服务

[root@node1 rabbitmq]# systemctl restart rabbitmq-server

此时就可以从外部访问了,但此时再看log文件,发现内容还是原来的,还是显示没有找到配置文件

[root@node1 rabbitmq]# vim rabbit\@node2.log

=INFO REPORT==== -Aug-:::: ===
Starting RabbitMQ 3.6. on Erlang R16B03-
Copyright (C) - Pivotal Software, Inc.
Licensed under the MPL. See http://www.rabbitmq.com/ =INFO REPORT==== 20-Aug-2017::08:03:11 ===
node : rabbit@node2
home dir : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config (not found)
cookie hash : vNIydXbvZSku+QwtRGImSQ==
log : /var/log/rabbitmq/rabbit@node2.log
sasl log : /var/log/rabbitmq/rabbit@node2-sasl.log
database dir : /var/lib/rabbitmq/mnesia/rabbit@node2

手动删除这个文件再重启服务,不过这不影响使用

[root@node1 rabbitmq]# rm rabbit\@node2.log
[root@node1 rabbitmq]# systemctl restart rabbitmq-server

在此查看log文件,OK了

[root@node1 rabbitmq]# vim rabbit\@node2.log

=INFO REPORT==== -Aug-:::: ===
Starting RabbitMQ 3.6. on Erlang R16B03-
Copyright (C) - Pivotal Software, Inc.
Licensed under the MPL. See http://www.rabbitmq.com/ =INFO REPORT==== 20-Aug-2017::08:26:56 ===
node : rabbit@node2
home dir : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config
cookie hash : vNIydXbvZSku+QwtRGImSQ==
log : /var/log/rabbitmq/rabbit@node2.log
sasl log : /var/log/rabbitmq/rabbit@node2-sasl.log
database dir : /var/lib/rabbitmq/mnesia/rabbit@node2

启用RabbitMQ Web插件

[root@node1 ~]# rabbitmq-plugins enable rabbitmq_management

关闭Rabbitmq Web管理接口

[root@node1 rabbitmq]# rabbitmq-plugins disable rabbitmq_management

RabbitMQ用户管理

添加用户为:root ,密码为:admin)

[root@node1 ~]# rabbitmqctl add_user admin admin

设置用户角色(设置admin用户为管理员角色)

[root@node1 ~]# rabbitmqctl set_user_tags admin administrator

设置用户权限(设置admin用户配置、写、读的权限)

[root@node1 ~]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

删除用户(删除guest用户)

[root@node1 ~]# rabbitmqctl delete_user guest

如果配置防火墙,开启端口

[root@node2 rabbitmq]# firewall-cmd --zone=public --add-port=/tcp --permanent
[root@node2 rabbitmq]# firewall-cmd --reload

在Web输入服务器IP:端口

http://IP:15672

RabbitMQ集群配置

设置hosts解析,所有节点配置相同

[root@node1 ~]# vim /etc/hosts
10.0.0.20 node1
10.0.0.21 node2
10.0.0.22 node3

设置Erlang Cookie

RabbitMQ节点之间和命令行工具 (e.g. rabbitmqctl)是使用Cookie互通的,Cookie是一组随机的数字+字母的字符串。当RabbitMQ服务器启动的时候,Erlang VM会自动创建一个随机内容的Cookie文件。如果是通过源安装RabbitMQ的话,Erlang Cookie 文件在/var/lib/rabbitmq/.erlang.cookie。如果是通过源码安装的RabbitMQ,Erlang Cookie文件$HOME/.erlang.cookie。

修改node1改文件的权限

[root@node1 ~]# chmod 777 /var/lib/rabbitmq/.erlang.cookie

然后将文件复制到node2、node3上面

  node2

[root@node2 ~]# cd /var/lib/rabbitmq
[root@node2 rabbitmq ~]# chmod 777 .erlang.cookie
[root@node2 rabbitmq ~]# scp -r 10.0.0.20:/var/lib/rabbitmq/.erlang.cookie .
[root@node2 rabbitmq ~]# chmod 400 .erlang.cookie

  node3

[root@node3 ~]# cd /var/lib/rabbitmq
[root@node3 rabbitmq ~]# chmod 777 .erlang.cookie
[root@node3 rabbitmq ~]# scp -r 10.0.0.20:/var/lib/rabbitmq/.erlang.cookie .
[root@node3 rabbitmq ~]# chmod .erlang.cookie

将node1的文件权限恢复过来

[root@node1 ~]# chmod 400 /var/lib/rabbitmq/.erlang.cookie

查看三台机器上的 .erlang.cookie的值是一致的

[root@node1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
CAWVPZYTTTUGFZTYNUHG
[root@node2 ~]# cat /var/lib/rabbitmq/.erlang.cookie
CAWVPZYTTTUGFZTYNUHG
[root@node3 ~]# cat /var/lib/rabbitmq/.erlang.cookie
CAWVPZYTTTUGFZTYNUHG

使用detached参数,在后台启动Rabbit Node,要先停止现有的Rabbitmq-server,再重新在后台执行

node1

[root@node1 ~]# rabbitmqctl stop
[root@node1 ~]# rabbitmq-server -detached
[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node1]}]},
{running_nodes,[rabbit@node1]},
{cluster_name,<<"rabbit@node1">>},
{partitions,[]},
{alarms,[{rabbit@node1,[]}]}]

node2

[root@node2 ~]# rabbitmqctl stop
[root@node2 ~]# rabbitmq-server -detached
[root@node2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node2 ...
[{nodes,[{disc,[rabbit@node2]}]},
{running_nodes,[rabbit@node2]},
{cluster_name,<<"rabbit@node2">>},
{partitions,[]},
{alarms,[{rabbit@node2,[]}]}]

node3

[root@node2 ~]# rabbitmqctl stop
[root@node2 ~]# rabbitmq-server -detached
[root@node2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node2 ...
[{nodes,[{disc,[rabbit@node2]}]},
{running_nodes,[rabbit@node2]},
{cluster_name,<<"rabbit@node2">>},
{partitions,[]},
{alarms,[{rabbit@node2,[]}]}]

将node1、node2、node3组成集群

因为rabbitmq-server启动时,会一起启动节点和应用,它预先设置RabbitMQ应用为standalone模式。要将一个节点加入到现有的集群中,你需要停止这个应用并将节点设置为原始状态,然后就为加入集群准备好了。如果使用./rabbitmqctl stop,应用和节点都将被关闭。所以使用rabbitmqctl stop_app仅仅关闭应用。

node1

[root@node1 ~]# rabbitmqctl stop_app
Stopping node rabbit@node1 ...
[root@node1 ~]# rabbitmqctl join_cluster --rm rabbit@node2
Clustering node rabbit@node2 with rabbit@node1 ...
[root@node1 ~]# rabbitmqctl start_app
Starting node rabbit@node2 ...

   node3

[root@node3 ~]# rabbitmqctl stop_app
Stopping node rabbit@node3 ...
[root@node3 ~]# rabbitmqctl join_cluster --rm rabbit@node2
Clustering node rabbit@node3 with rabbit@node1 ...
[root@node3 ~]# rabbitmqctl start_app
Starting node rabbit@node3 ...

此时 node1 与 node3 也会自动建立连接

如果要使用内存节点,则可以使用以下命令

[root@node2 ~]# rabbitmqctl join_cluster --ram rabbit@node1

集群配置好后,可以在 RabbitMQ 任意节点上执行 rabbitmqctl cluster_status 来查看是否集群配置成功

[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node2]},{{ram,[rabbit@node1,rabbit@node3]}]},
{running_nodes,[rabbit@node1,rabbit@node2,rabbit@node3]},
{cluster_name,<<"rabbit@node1">>},
{partitions,[]},
{alarms,[{rabbit@node1,[]},{rabbit@node2,[]},{rabbit@node3,[]}]}]

RabbitMQ镜像功能(所有节点执行)

设置policy,以所有队列被镜像到集群其他所有节点,一个节点挂掉然后重启后会自动同步队列消息(我们生产环境采用这个方式)

[root@node1 ~]# rabbitmqctl set_policy ha-all-queue "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

安装软件负载均衡器HAProxy(node3相同操作)

安装haproxy

[root@node2 ~]# yum install -y haproxy

安装完以后,配置文件的目录在/etc/haproxy/haproxy.cfg,以下是我修改后的配置文件

[root@node2 ~]# cd /etc/haproxy/
[root@node2 haproxy]# vim haproxy.cfg
###########全局配置#########
global
log /dev/log local0
log /dev/log local1 notice
# chroot /var/lib/haproxy # 改变当前工作目录
# stats socket /run/haproxy/admin.sock mode 660 level admin # 创建监控所用的套接字目录
# stats socket /var/lib/haproxy/stats
pidfile /var/run/haproxy.pid # haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
maxconn 4000 # 最大连接数,默认4000
user haproxy # 默认用户
group haproxy # 默认用户组
daemon # 创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon ###########默认配置#########
defaults
log global
mode http
# option dontlognull
option httplog
timeout connect 5000 # 连接超时时间
timeout client 50000 # 客户端连接超时时间
timeout server 50000 # 服务器端连接超时时间
option httpclose # 每次请求完毕后主动关闭http通道
option httplog # 日志类别http日志格式
option forwardfor # 如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option redispatch # serverId对应的服务器挂掉后,强制定向到其他健康的服务器
timeout connect 10000 # default 10 second timeout if a backend is not found
maxconn 60000 # 最大连接数
retries # 3次连接失败就认为服务不可用,也可以通过后面设置
# errorfile /etc/haproxy/errors/.http
# errorfile /etc/haproxy/errors/.http
# errorfile /etc/haproxy/errors/.http
# errorfile /etc/haproxy/errors/.http
# errorfile /etc/haproxy/errors/.http
# errorfile /etc/haproxy/errors/.http
# errorfile /etc/haproxy/errors/.http
####################################################################
listen http_front
bind 0.0.0.0: #监听端口
stats refresh 30s #统计页面自动刷新时间
stats uri /haproxy?stats #统计页面url
stats realm Haproxy Manager #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
#stats hide-version #隐藏统计页面上HAProxy的版本信息 #####################我把RabbitMQ的管理界面也放在HAProxy后面了###############################
listen rabbitmq_admin
bind 0.0.0.0:
server node1 10.0.0.20:
server node2 10.0.0.21:
server node3 10.0.0.22: #################################################################### listen rabbitmq_cluster
bind 0.0.0.0:
option tcplog
mode tcp
timeout client 3h
timeout server 3h
option clitcpka
balance roundrobin #负载均衡算法(#banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数)
#balance url_param userid
#balance url_param session_id check_post
#balance hdr(User-Agent)
#balance hdr(host)
#balance hdr(Host) use_domain_only
#balance rdp-cookie
#balance leastconn
#balance source //ip
server node1 10.0.0.20: check inter 5s rise fall
#check inter 是检测心跳频率,rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用
server node2 10.0.0.21: check inter 5s rise fall
server node3 10.0.0.22: check inter 5s rise fall

启动

[root@node2 ~]# systemctl haproxy start

关闭

[root@node2 ~]# service haproxy stop

重启

[root@node2 ~]# service haproxy restart

加入开机启动

[root@node2 ~]# systemctl enable haproxy

查看开机启动的程序

[root@node2 ~]# ls /etc/systemd/system/multi-user.target.wants/

Web访问

http://10.0.0.21:1080/haproxy?stats

配置Haproxy增加日志记录功能(node3相同操作)

创建日志文件/var/log/haproxy/haproxy.log

[root@node2 ~]# cd /var/log/
[root@node2 log]# mkdir haproxy
[root@node2 log]# cd haproxy
[root@node2 haproxy]# touch haproxy.log
[root@node2 haproxy]# chmod a+w haproxy.log

开启rsyslog的haproxy日志记录功能,编辑/etc/rsyslog.conf文件,将下列两句开头的 # 注释去掉

[root@node2 ~]# vim /etc/rsyslog.conf
#$ModLoad imudp
#$UDPServerRun
$ModLoad imudp
$UDPServerRun

# Save boot messages also to boot.log
local7.* /var/log/boot.log

之后添加

# Save haproxy log
local0.* /var/log/haproxy/haproxy.log

修改/etc/sysconfig/rsyslog 文件

[root@node2 ~]# vim /etc/sysconfig/rsyslog

SYSLOGD_OPTIONS=""  

改为

SYSLOGD_OPTIONS="-r -m 0 -c 2"  

修改/etc/haproxy/haproxy.cfg文件,在global区段添加

log         127.0.0.1 local0 

重启rsyslog和haproxy服务

[root@node2 ~]# service haproxy restart
[root@node2 ~]# service rsyslog restart

查看日志

[root@node2 ~]# tail -f /var/log/haproxy/haproxy.log 

安装keepalived(node3相同操作 keepalived.conf 配置不同)

 

安装

[root@node2 ~]# yum -y install keepalived

查看版本

[root@node2 ~]# keepalived -v

配置 keepalived.conf  (10.0.0.21)

[root@node2 ~]# vim /etc/keepalived/keepalived.conf 

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id rabbitmq #集群名称,相同集群名称必须相同
} vrrp_instance VI_1 {
state MASTER #主从设置,这里设置为主
interface eth0
virtual_router_id 51
priority 150 #定义访问优先级,数值越大优先级越高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.30 #置虚拟IP,需在相同网段
}
}
 

配置 10.0.0.22(备)

[root@node4 ~]# vim /etc/keepalived/keepalived.conf 

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id rabbitmq #集群名称,必须和web01设置相同
} vrrp_instance VI_1 {
state BACKUP #主从设置,这里设置为从
interface eth0
virtual_router_id 51
priority 100 #定义访问优先级,从要比主的数值小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.30 #设置虚拟IP,必须相同
}
}
 

重启服务查看node2(10.0.0.21)网卡上是否有 10.0.0.30 IP

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:e6:36:7b brd ff:ff:ff:ff:ff:ff
inet 10.0.0.21/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.0.0.30/32 scope global eth0

而此是node3(10.0.0.22)的网卡上是没有10.0.0.30 IP

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:15:ba:84 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.22/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever

可以关闭node2(10.0.0.21)的keepalived 服务,查看IP是否转移到了node3(10.0.0.22)上

node2(10.0.0.21)上已经没有了10.0.0.30

[root@node1 ~]# systemctl stop  keepalived

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:e6:36:7b brd ff:ff:ff:ff:ff:ff
inet 10.0.0.21/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
 

查看node3(10.0.0.22)

 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:15:ba:84 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.22/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.0.0.30/32 scope global eth0
valid_lft forever preferred_lft forever
 

此时10.0.0.30 已经转移到了 10.0.0.22上

启动keepalived即可,10.0.0.30是对外提供的统一地址。

通过10.0.0.30:5672就可以访问rabbitmq服务

注意:keepalived可能运行多个实例,比如redis和haproxy共存,在这种情况下,必须注意几点:

一、VIP必须各实例不同
二、virtual_router_id必须各实例不同
 

centos7 rabbitmq集群搭建+高可用的更多相关文章

  1. RabbitMQ 集群与高可用配置

    集群概述 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送 ...

  2. (转)RabbitMQ 集群与高可用配置

    集群概述 环境 配置步骤 集群概述 通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务 ...

  3. RabbitMQ集群和高可用配置

    概述 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.ActionScript.XMPP. ...

  4. 消息中间件-RabbitMQ集群和高可用

    多机多节点集群部署 一. 环境准备 准备三台安装好RabbitMQ 的机器,安装方法见 安装步骤 10.10.1.41 10.10.1.42 10.10.1.43 提示:如果使用虚拟机,可以在一台VM ...

  5. Rabbitmq安装、集群与高可用配置

    历史: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多 ...

  6. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

  7. RabbitMQ集群搭建和使用

    一.环境准备 1.选择RabbitMQ的版本 http://www.rabbitmq.com/changelog.html 注: 不同版本的Linux选择的RabbitMQ版本也不同,参照 http: ...

  8. Nginx+Zuul集群实现高可用网关

    代码参考:https://github.com/HCJ-shadow/Zuul-Gateway-Cluster-Nginx Zuul的路由转发功能 前期准备 搭建Eureka服务注册中心 服务提供者m ...

  9. Dubbo入门到精通学习笔记(十五):Redis集群的安装(Redis3+CentOS)、Redis集群的高可用测试(含Jedis客户端的使用)、Redis集群的扩展测试

    文章目录 Redis集群的安装(Redis3+CentOS) 参考文档 Redis 集群介绍.特性.规范等(可看提供的参考文档+视频解说) Redis 集群的安装(Redis3.0.3 + CentO ...

随机推荐

  1. 开源监控系统整合Nagios+Cacti+Nconf详解

    1.配置好yum源,为了提高效率建议搭建本地yum源 yum install -y http*  yum install -y mysql*  yum install -y php-*  yum in ...

  2. Android学习笔记————利用JDBC连接服务器数据库

    /******************************************************************************************** * auth ...

  3. gulp-px2rem-plugin 插件的一个小bug

    最近在使用这个插件的过程中发现一个bug: 不支持 含有小数的形式. 查看源码后,修改了下其中的正则,使其支持小数形式(66.66px..6px ). 作者的源码最近一次更新都在两年前,所以就简单的记 ...

  4. hdu4638 莫队算法

    莫队算法基础题,题目看懂就能做出来 #include<iostream> #include<cstring> #include<cstdio> #include&l ...

  5. hdu2642二维树状数组单点更新

    碰到这种题一定要注意坐标是不是有序的,也要注意坐标是不是有0的,有的话需要+1处理 #include<bits/stdc++.h> using namespace std; #define ...

  6. poj1195二维树状数组模板

    二维树状数组和一维的也差不多,改一下add和query函数即可:即按行修改,行内单点修改即可 /* 二维树状数组,询问一个二维区间内的数之和 */ #include<iostream> # ...

  7. Python 索引迭代

    1.使用enumerate函数 L = ['Adam', 'Lisa', 'Bart', 'Paul'] for index, name in enumerate(L):     print inde ...

  8. Jmeter NonGUI模式

    一般情况下我们都是在NonGUI模式下运行jmeter.这样做有两个好处 节省系统资源,能够产生更大的负载 可以通过命令行参数对测试场景进行更精细的配置 示例 创建luzhi.jmx脚本 jmeter ...

  9. ERP退货系统管理(四十五)

    添加的存储过程:(添加退货申请信息的存储过程) CREATE PROCEDURE [dbo].[BioBackSendGoods_ADD] @SendBackID INT OUTPUT, ), @Ap ...

  10. istringstream、ostringstream、stringstream 类介绍 和 stringstream类 clear函数的真正用途

    istringstream.ostringstream.stringstream 类介绍 和 stringstream类 clear函数的真正用途 来源: http://blog.csdn.net/T ...