实验环境

RabbitMQ 集群

server1.example.com    IP: 10.10.10.11    Node: disk
server2.example.com    IP: 10.10.10.12    Node: disk
server3.example.com    IP: 10.10.10.13    Node: disk

RabbitMQ相关端口

 (epmd),  (Erlang distribution)
, (AMQP -- without and with TLS)
(if management plugin is enabled)
, (if STOMP is enabled)
, (if MQTT is enabled)

YUM方式

添加EPEL源

# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

添加Erlang源

# yum install wget
# rpm -Uvh http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm

安装RabbitMQ

# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm
# rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
# yum install rabbitmq-server-3.6.-.noarch.rpm

手动RPM方式

安装RabbitMQ

# wget http://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm
# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm
# wget https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
# rpm --import rabbitmq-signing-key-public.asc
# rpm -Uvh erlang-18.3-.el7.centos.x86_64.rpm rabbitmq-server-3.6.-.noarch.rpm

注: 如果是RedHat6,erlang下载地址为 http://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el6.x86_64.rpm

RabbitMQ单机配置

  • 调整可打开文件/文件描述符数目(高并发支持)

调整系统限制

# vi /etc/sysctl.conf

fs.file-max = 

使设置生效

# sysctl -p

查看系统限制

# sysctl fs.file-max

调整用户限制

# vi /etc/security/limits.conf

*              soft     nofile
* hard nofile

重启系统使之生效,检查用户限制是否生效

# ulimit -n
  • 添加/etc/hosts条目

# echo "192.168.136.201   server1" >> /etc/hosts
  • 开通防火墙上Web UI访问端口(默认:15672/tcp)

# firewall-cmd --permanent --add-port=/tcp
# firewall-cmd –-reload
  • 设置RabbitMQ服务自启动,并启动RabbbitMQ服务

# chkconfig rabbitmq-server on
# service rabbitmq-server start
  • 启用RabbitMQ监控插件

# rabbitmq-plugins enable rabbitmq_management

  • RabbitMQ用户管理

添加用户(用户名root,密码admin)

# rabbitmqctl add_user admin admin

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

# rabbitmqctl set_user_tags admin administrator

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

# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

删除用户(删除guest用户)

# rabbitmqctl delete_user guest

注意:rabbitmq从3.3.0开始禁止使用guest/guest权限通过除localhost外的访问。

如果想使用guest/guest通过远程机器访问,需要在rabbitmq配置文件中(/etc/rabbitmq/rabbitmq.config)中设置loopback_users为[]。

[{rabbit, [{loopback_users, []}]}].
  • 登陆Web UI

在浏览器中打开http://10.10.10.11:15672

输入用户名、密码,登陆成功后的界面

  • 检查RabbitMQ状态

查看进程:

# ps aux | grep -v grep | grep rabbitmq-server

查看端口:

# netstat -tnlp | grep 

如果提示netstat命令没找到,请先安装net-tools

# yum install net-tools

查看RabbitMQ状态:

# rabbitmqctl status
  • RabbitMQ默认配置

# cat /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.1/sbin/rabbitmq-defaults

### next line potentially updated in package install steps
SYS_PREFIX= ### next line will be updated when generating a standalone release
ERL_DIR= CLEAN_BOOT_FILE=start_clean
SASL_BOOT_FILE=start_sasl ## Set default values BOOT_MODULE="rabbit" CONFIG_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq
LOG_BASE=${SYS_PREFIX}/var/log/rabbitmq
MNESIA_BASE=${SYS_PREFIX}/var/lib/rabbitmq/mnesia
ENABLED_PLUGINS_FILE=${SYS_PREFIX}/etc/rabbitmq/enabled_plugins PLUGINS_DIR="${RABBITMQ_HOME}/plugins"
IO_THREAD_POOL_SIZE= CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf

从上面看出:

- 系统prefix是空
- 配置文件路径是 /etc/rabbitmq/rabbitmq.config    (erlang会自动加上.config后缀)
- 环境配置文件是 /etc/rabbitmq/rabbitmq-env.conf
- 日志文件目录是 /var/log/rabbitmq
- 插件文件目录是 安装目录下的plugins,这里RPM安装方式下是 /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.1/plugins

RabbitMQ集群配置

集群配置在单机配置完成的基础上进行

  • 添加/etc/hosts条目

在server1、server2、server3里的/etc/hosts文件中分别添加:

10.10.10.11   server1
10.10.10.12 server2
10.10.10.13 server3
  • 设置每个节点Cookie

Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。Erlang的集群中各节点是通过一个magic cookie来实现的,这个cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是400的权限。所以必须保证各节点cookie保持一致,否则节点之间就无法通信

# chmod  /var/lib/rabbitmq/.erlang.cookie
# echo -n "AZVOCZYZZBVFLBPTBXU" > /var/lib/rabbitmq/.erlang.cookie
# chmod /var/lib/rabbitmq/.erlang.cookie

建议在RabbitMQ服务启动前修改过cookie,如果RabbitMQ服务已经启动,修改cookie值后,必须重启RabbitMQ服务,这步很关键

# ps -ef | grep ^rabbitmq | awk '{print $2}' | xargs kill -
# service rabbitmq-server start
  • 开通防火墙上集群通信端口
# firewall-cmd --permanent --add-port={/tcp,/tcp}
# firewall-cmd --reload
  • 加入集群

将 server1、server2 、server3组成集群:

默认是磁盘节点,如果是内存节点的话,需要加--ram参数

在server2、server3上分别运行:

# rabbitmqctl stop_app
# rabbitmqctl join_cluster rabbit@server1
# rabbitmqctl start_app
  • 设置镜像策略
# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

相关知识

rabbitmqctl (rabbitmq管理工具)
rabbitmq-plugins (rabbitmq插件管理工具)
rabbitmq-server (rabbitmq服务)

主要配置文件

1. enabled_plugins:设置允许的插件列表。

2. rabbitmq.config:设置rabbitmq运行参数,结构为hash数组格式。

3. rabbitmq-env.conf:rabbitmq环境参数配置

rabbitmq-env.conf中的每项都以RABBITMQ_为前缀,常用参数如下:

RABBITMQ_NODENAME=FZTEC- //节点名称
RABBITMQ_NODE_IP_ADDRESS=127.0.0.1 //IP地址,空串bind所有地址,指定地址bind指定网络接口
RABBITMQ_NODE_PORT= //TCP端口号,默认是5672
RABBITMQ_LOG_BASE=/data/rabbitmq/log //日志所在路径
RABBITMQ_PLUGINS_DIR=/data/rabbitmq/plugins //插件所在路径
RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia //mnesia所在路径
rabbitmq-env.conf和rabbitmq.config默认是不存在的。
rabbitmq-env.conf需要在缺省位置手动创建一个。
rabbitmq.config需要在RABBITMQ_CONFIG_FILE指定位置手动创建一个。
  • 脚本安装RabbitMQ的脚本

创建脚本文件
# mkdir rabbitmq-script && cd rabbitmq-script
# vi rabbitmq.config
[
{rabbit,
[
{cluster_partition_handling, pause_minority}
]
}
].
 
# vi settings.conf
ERLANG_EL6_RPM=erlang-18.3-.el6.x86_64.rpm
ERLANG_EL6_RPM_URL=http://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el6.x86_64.rpm ERLANG_EL7_RPM=erlang-18.3-.el7.centos.x86_64.rpm
ERLANG_EL7_RPM_URL=http://www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm RABBITMQ_RPM=rabbitmq-server-3.6.-.noarch.rpm
RABBITMQ_RPM_URL=http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm RABBITMQ_KEY=rabbitmq-signing-key-public.asc
RABBITMQ_KEY_URL=https://www.rabbitmq.com/rabbitmq-signing-key-public.asc RABBITMQ_CONFIG_FILE=rabbitmq.config ERLANG_COOKIE=AZVOCZYZZBVFLBPTBXUD RABBITMQ_HTTP_PORT=
ERL_EPMD_PORT=
RABBITMQ_DIST_PORT= ADMIN_PWD=admin

# vi install_rabbitmq.sh

#!/bin/bash
#====================================================================
# install_rabbitmq.sh
#
# Linux RabbitMQ Auto Install Script
#
# Copyright (c) , Edward Guan <edward.guan@mkcorp.com>
# All rights reserved.
# Distributed under the GNU General Public License, version 3.0.
#
# Intro: http://www.cnblogs.com/edward2013/p/5061511.html
#
#==================================================================== echo "Note: This tiny script has been hardcoded specifically for RHEL/CentOS"
echo "" if [ $(id -u) != "" ]; then
echo "Error: You must be root to run this script!"
exit
fi # defind functions
msg() {
printf '%b\n' "$1" >&
} success() {
msg "\33[32m[✔]\33[0m ${1}${2}"
} error() {
msg "\33[31m[✘]\33[0m ${1}${2}"
exit
} program_exists() {
command -v $ >/dev/null >&
} function open_rabbitmq_ports() {
if program_exists firewall-cmd; then
firewall-cmd -q --permanent \
--add-port={$RABBITMQ_HTTP_PORT/tcp,$ERL_EPMD_PORT/tcp,$RABBITMQ_DIST_PORT/tcp}
firewall-cmd -q --reload
firewall-cmd -q --query-port $RABBITMQ_HTTP_PORT/tcp || return
firewall-cmd -q --query-port $ERL_EPMD_PORT/tcp || return
firewall-cmd -q --query-port $RABBITMQ_DIST_PORT/tcp || return
fi
} function erase_rabbitmq() {
rpm -e rabbitmq-server
} function update_rabbitmq_package() {
local TMP_FILE=/tmp/.$(basename "$0").tmp
# install required package
program_exists wget || yum -y install wget >/dev/null >& # install erlang rpm
if [ ! -f "$ERLANG_RPM_PATH" ]; then
msg "WARNING: $ERLANG_RPM_PATH not found."
msg "Try to download and install from $ERLANG_RPM_URL..."
wget $ERLANG_RPM_URL -P $SCRIPT_PATH || return
fi
rpm -U $ERLANG_RPM_PATH >$TMP_FILE && success "Installed $ERLANG_RPM_PATH" || {
sed 's/^[ |\t]*//' $TMP_FILE | grep "already installed" || return
} # import rabbitmq key
if [ ! -f "$RABBITMQ_KEY_PATH" ]; then
msg "WARNING: $RABBITMQ_KEY_PATH not found."
msg "Try to download and import from $RABBITMQ_KEY_URL..."
wget $RABBITMQ_KEY_URL -P $SCRIPT_PATH || return
fi
rpm --import $RABBITMQ_KEY_PATH && success "Imported $RABBITMQ_KEY_PATH" # install rabbitmq rpm
if [ ! -f "$RABBITMQ_RPM_PATH" ]; then
msg "WARNING: $RABBITMQ_RPM_PATH not found."
msg "Try to download and install from $RABBITMQ_RPM_URL..."
wget $RABBITMQ_RPM_URL -P $SCRIPT_PATH || return
fi
rpm -U $RABBITMQ_RPM_PATH >$TMP_FILE && success "Installed $RABBITMQ_RPM_PATH" || {
sed 's/^[ |\t]*//' $TMP_FILE | grep "already installed" || return
}
} function set_rabbitmq_users() {
if program_exists rabbitmqctl; then
rabbitmqctl list_users | grep -q guest && \
rabbitmqctl delete_user guest >/dev/null && \
success "Deleted user [guest]"
rabbitmqctl list_users | grep -q admin || {
rabbitmqctl add_user admin $ADMIN_PWD >/dev/null && \
rabbitmqctl set_user_tags admin administrator >/dev/null && \
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" >/dev/null && \
success "Added user [admin]"
}
else
msg "Command not find: rabbitmqctl" && return
fi
} function set_rabbitmq_policies() {
if program_exists rabbitmqctl; then
rabbitmqctl list_policies | grep -q ha-all || {
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' >/dev/null && \
success "Added policy [ha-all]"
}
else
msg "Command not find: rabbitmqctl" && return
fi
} function install_rabbitmq() {
rpm -q rabbitmq-server >/dev/null && \
error "$(rpm -q rabbitmq-server) is already installed"
update_rabbitmq_package || return # enable rabbitmq plugin
rabbitmq-plugins enable rabbitmq_management >/dev/null && \
success "Enabled rabbitmq plugin [rabbitmq_management]" || return # open firewall ports
open_rabbitmq_ports && \
success "Opened rabbitmq ports [$RABBITMQ_HTTP_PORT/tcp,$ERL_EPMD_PORT/tcp,$RABBITMQ_DIST_PORT/tcp]" || \
return # deploy rabbitmq.config
RABBITMQ_CONFIG_PATH="$SCRIPT_PATH/$RABBITMQ_CONFIG_FILE"
RABBITMQ_CONFIG_LOCATION=/etc/rabbitmq/rabbitmq.config
cp $RABBITMQ_CONFIG_PATH $RABBITMQ_CONFIG_LOCATION && \
success "Copyed $RABBITMQ_CONFIG_PATH to $RABBITMQ_CONFIG_LOCATION" || return # add host entry into /etc/hosts
HOST_ENTRY=$(egrep "127.0.0.1 +$(hostname -s)" /etc/hosts)
if [ "x$HOST_ENTRY" == "x" ]; then
echo "127.0.0.1 $(hostname -s)" >> /etc/hosts && \
success "Added [127.0.0.1 $(hostname -s)] into /etc/hosts" || return
else
msg "[$HOST_ENTRY] is already added into /etc/hosts"
fi # set erlang cookie
[ "x$COOKIE" == "x" ] && COOKIE="$ERLANG_COOKIE"
ERLANG_COOKIE_PATH=/var/lib/rabbitmq/.erlang.cookie
if [ ! -f "$ERLANG_COOKIE_PATH" ]; then
msg "WARNING: $ERLANG_COOKIE_PATH is not exist, create new one"
touch $ERLANG_COOKIE_PATH || return
fi
chmod $ERLANG_COOKIE_PATH
echo -n "$COOKIE" >$ERLANG_COOKIE_PATH
chmod $ERLANG_COOKIE_PATH
chown rabbitmq:rabbitmq $ERLANG_COOKIE_PATH
if [ $(cat $ERLANG_COOKIE_PATH) = "$COOKIE" ]; then
success "Set erlang cookie value to $COOKIE"
fi
} function join_rabbitmq_cluster() {
local ret=
if [ "x$SERVER" != "x" ] && [ "$SERVER" != $(hostname -s) ]; then
if program_exists rabbitmqctl; then
rabbitmqctl stop_app >/dev/null
rabbitmqctl reset >/dev/null
if [ "$NODE" == "ram" ]; then
rabbitmqctl join_cluster --ram rabbit@$SERVER >/dev/null || let ret++
else
rabbitmqctl join_cluster rabbit@$SERVER >/dev/null || let ret++
fi
rabbitmqctl start_app >/dev/null
else
msg "Command not find: rabbitmqctl" && return
fi
if [ "$ret" -eq ]; then
success "Joined rabbit@$SERVER"
return
else
return
fi
fi
} function restart_rabbitmq() {
# kill all rabbitmq server processes
local RABBITMQ_PIDS=$(ps -ef | grep ^rabbitmq | cut -c - | tr -s "\n" " ")
if [ "x$RABBITMQ_PIDS" != "x" ]; then
kill - $RABBITMQ_PIDS && success "Killed all rabbitmq server processes"
fi
# enable and start rabbitmq server
chkconfig rabbitmq-server on
service rabbitmq-server start
} function print_usage() {
echo "Usage: $(basename "$") [OPTIONS...]"
echo ""
echo "Options"
echo " [-h|--help] Prints a short help text and exists"
echo " [-i|--install] Install rabbitmq server"
echo " [-u|--update] Update rabbitmq server"
echo " [-e|--erase] Erase (uninstall) rabbitmq server"
echo " [-c|--cookie] <cookie> Set erlang cookie"
echo " [-j|--join] <server> Join rabbitmq cluster"
echo " [-n|--node] <disc|ram> Set cluster node type"
} # read the options
TEMP=`getopt -o hiuec:j:n: --long help,install,update,erase,cookie:,join:,node: -n $(basename "$0") -- "$@"`
eval set -- "$TEMP" # extract options and their arguments into variables.
while true; do
case "$1" in
-h|--help) print_usage ; exit ;;
-i|--install) ACTION=install ; shift ;;
-u|--update) ACTION=update ; shift ;;
-e|--erase) ACTION=erase ; shift ;;
-c|--cookie) COOKIE=$ ; shift ;;
-j|--join) SERVER=$ ; shift ;;
-n|--node) NODE=$ ; shift ;;
--) shift ; break ;;
*) error "Internal error!" ;;
esac
done # get script path
SCRIPT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # load settings
source "$SCRIPT_PATH/settings.conf" || exit # set erlang and rabbitmq rpm & key path
case $(uname -r) in
*el7*)
ERLANG_RPM_PATH="$SCRIPT_PATH/$ERLANG_EL7_RPM";
ERLANG_RPM_URL="$ERLANG_EL7_RPM_URL" ;;
*el6*)
ERLANG_RPM_PATH="$SCRIPT_PATH/$ERLANG_EL6_RPM";
ERLANG_RPM_URL="$ERLANG_EL6_RPM_URL" ;;
*) error "Your system is not RHEL/CentOS" ;;
esac
RABBITMQ_RPM_PATH="$SCRIPT_PATH/$RABBITMQ_RPM"
RABBITMQ_KEY_PATH="$SCRIPT_PATH/$RABBITMQ_KEY" if [ "x$ACTION" == "x" ] && [ "x$SERVER" == "x" ]; then
error "$(basename "$"): missing operand\n" \
"Try '$(basename "$") --help' for more information."
fi echo "$NODE" | grep -qE "^disk$|^ram$|^$" || {
error "$(basename "$"): -n: must be disk or ram"
} # if ACTION is erase, erase rabbitmq server
if [ "$ACTION" == "erase" ]; then
erase_rabbitmq && {
msg "\nThanks for erasing rabbitmq-server."
msg "© `date +%Y` marykay company"
} || error "Failed erase rabbitmq server"
exit
fi # if ACTION is update, update rabbitmq server
if [ "$ACTION" == "update" ]; then
update_rabbitmq_package && restart_rabbitmq && {
msg "\nThanks for updating rabbitmq-server."
msg "© `date +%Y` marykay company"
} || error "Failed update rabbitmq server"
exit
fi # if ACTION is install, install rabbitmq server
if [ "$ACTION" == "install" ]; then
install_rabbitmq && restart_rabbitmq && set_rabbitmq_users && set_rabbitmq_policies && join_rabbitmq_cluster && {
msg "\nThanks for installing rabbitmq-server."
msg "© `date +%Y` marykay company"
} || error "Failed install rabbitmq server"
else
if [ "x$SERVER" != "x" ]; then
join_rabbitmq_cluster && {
msg "\nThanks for joining rabbitmq-server."
msg "© `date +%Y` marykay company"
} || error "Failed join rabbitmq server"
fi
fi

在server1,server2上分别运行脚本
# chmod +x install_rabbitmq.sh

安装RabbitMQ
# ./install_rabbitmq.sh -i

升级RabbitMQ
# ./install_rabbitmq.sh -u

卸载RabbitMQ
# ./install_rabbitmq.sh -e

加入群集,不带-n参数时,默认节点类型为dsik,-n参数后只能接ram和disk
# ./install_rabbitmq.sh -j server1 -n ram

安装RabbitMQ并加入群集
# ./install_rabbitmq.sh -ij server1

CentOS7安装RabbitMQ集群的更多相关文章

  1. CentOS7安装rabbitmq集群(二进制)

    一.RabbiMQ简介 RabbiMQ是用Erang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡. RabbiMQ模式 RabbitMQ模式大概分为以下三种: ...

  2. 集群架构和CentOS7安装RabbitMQ集群(单机版)

    1. 集群架构 1.1 四种内部元数据 队列元数据.交换器元数据.绑定元数据.vhost元数据. 单一节点中:会将数据存储到内存,同时将持久化元数据保存到硬盘. 集群中: 存储到磁盘上.内存中. 集群 ...

  3. CentOS7环境RabbitMQ集群配置管理(转载)

    CentOS7环境RabbitMQ集群配置管理(转载)   CentOS7系统内核版本:3.10.0-514.26.2.el7.x86_64 一.对应主机host地址(三台主机host文件要保持一致) ...

  4. docker-compose安装rabbitmq集群(主从集群---》镜像集群)

    docker-compose安装rabbitmq集群(主从集群--->镜像集群) yls 2020/5/11 创建docker-compose.yml 文件 version: '3' servi ...

  5. k8s中安装rabbitmq集群

    官方文档地址:https://www.rabbitmq.com/kubernetes/operator/quickstart-operator.html 要求 1.k8s版本要1.18及其以上 2.能 ...

  6. Springboot 1.5.x 集成基于Centos7的RabbitMQ集群安装及配置

    RabbitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一 ...

  7. CentOS7 搭建RabbitMQ集群 后台管理 历史消费记录查看

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

  8. kubernets安装rabbitmq集群.

    RabbitMQ集群的两种模式 1)普通模式:默认的集群模式,队列消息只存在单个节点上 2)镜像模式:队列为镜像队列,队列消息存在每个节点上 配置同步: 配置同步: 1.Ha mode 同步模式,以下 ...

  9. CentOS7 安装Hbase集群

    继续接上一章,已安装好Hadoop集群环境 http://www.cnblogs.com/dopeter/p/4612232.html 在此基础上继续安装Hbase集群 Hbase版本为1.0.1.1 ...

随机推荐

  1. HDU 1560 DNA sequence DFS

    题意:找到一个最短的串,使得所有给出的串是它的子序列,输出最短的串的长度,然后发现这个串最长是40 分析:从所给串的最长长度开始枚举,然后对于每个长度,暴力深搜,枚举当前位是哪一个字母,注意剪枝 注: ...

  2. Python脚本控制的WebDriver 常用操作 <二十二> 处理alert / confirm / prompt

    测试用例场景 webdriver中处理原生的js alert confirm 以及prompt是很简单的.具体思路是使用switch_to.alert()方法定位到alert/confirm/prom ...

  3. API性能测试基本性能指标及要求

    略 适用 Lifeix 所有后台应用. 1.事务(Transaction) 在web性能测试中,一个事务表示一个“从用户发送请求->web server接受到请求,进行处理-> web s ...

  4. 刷票 变 IP

    刷票 变 IP

  5. 房租管理小软件(四):对linq的使用

    1.对LInq的封装如下: private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMap ...

  6. C#递归遍历指定目录下文件和文件夹

    #region 使用递归查询某路径中的文件结构 public static void CheckFilePath() { ReadFilePath(); } public static void Re ...

  7. java对象和类学习

    定义对象的类: 一个对象的状态(属性或特征)是指那些具有他们当前值的数据域 一个对象的行为是由方法定义的,调用对象的方法就是完成对象的一个动作 使用一个通用类来定义同一类型的对象.类是一个模板,一个对 ...

  8. 万台规模下的SDN控制器集群部署实践

    目前在网络世界里,云计算.虚拟化.SDN.NFV这些话题都非常热.今天借这个机会我跟大家一起来一场SDN的深度之旅,从概念一直到实践一直到一些具体的技术. 本次分享分为三个主要部分: SDN & ...

  9. AQTime教程(1)

    AQTime教程 1 简介 AQTime和MemProof都是AutomatedQA旗下的产品,AQTime比MemProof提供了更丰富强大的功能.该产品含有完整的性能和调试工具集,能够收集程序运行 ...

  10. Lync安装随笔

    使用域管理员权限扩展架构 1.iis角色安装 2.net3.5,消息队列服务器.目录服务集成.桌面体验.AD DS和AD LDS工具(远程服务管理工具中),启用WindowsFirewall服务 3. ...