实验环境

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. HDU4738 Caocao's Bridges 无向图的桥

    一眼题:找所有的桥,然后求最小权值 但是有很多坑点 1:如果本来不联通 输出0,(这个坑我知道) 2:但是还有一个坑,就是当整个连通,最小桥的权值是0时,也必须派一个人去,wa了无数遍(还是太年轻) ...

  2. js 中&& 与 ||

    /*** 几乎所有语言中||和&&都遵循“短路”原理,* 如&&中第一个表达式为假就不会去处理第二个表达式,而||正好相反.* js也遵循上述原则.* 当||时,找到为 ...

  3. 利用过采样技术提高ADC测量微弱信号时的分辨率

    1. 引言 随着科学技术的发展,人们对宏观和微观世界逐步了解,越来越多领域(物理学.化学.天文学.军事雷达.地震学.生物医学等)的微弱信号需要被检测,例如:弱磁.弱光.微震动.小位移.心电.脑电等[1 ...

  4. CCF 认证4

    题意:求强联通分量 Tarjan算法 #include<iostream> #include<stdio.h> #include<stdlib.h> #includ ...

  5. prefuse学习(一)用非数据库连接和xml的方式读入数据

    prefuse正常的数据源需要从ConnectionFactory中生产出来,但是如果平时不想用里面给的方法得到数据,就需要手动创造Graph里面所需要的内容两个Table 下面是我自己写的从文件中读 ...

  6. 编译并使用Lua语言

    Lua是一个小巧的脚本语言,该语言设计的目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. 可扩展性.Lua的扩展性非常卓越,可以通过Lua代码或C代码扩展,很多功能可以通过外部库来扩 ...

  7. 10段实用的HTML5代码

    1.HTML5编写的CSS ResetCSS Reset也可以写成Reset CSS,即重设浏览器样式. /*   html5doctor.com Reset Stylesheet (Eric Mey ...

  8. 浅析作用域链–JS基础核心之一

    JS中的作用域,大家都知道的,分为全局作用域和局部作用域,没有块级作用域,听起来其实很简单的,可是作用域是否能够有深入的了解,对于JS代码逻辑的编写成功率,BUG的解决能力,以及是否能写出更优秀的代码 ...

  9. iOS开发-相关文档

    关于调试,查看Xcode Overview文档相关部分:http://developer.apple.com/library/ios/documentation/ToolsLanguages/Conc ...

  10. WinForm中如何判断关闭事件来源于用户点击右上角的“关闭”按钮

    在C#的WinForm程序中,有的时候需要判定关闭请求从哪里发出来的.比如是用户点击了右上角的“关闭”按钮,还是调用了WinForm.Close()方法.最典型的是要知道点击右上角的“关闭”按钮发出的 ...