Apache RocketMQ 是一个分布式消息及流处理平台,具有低延迟、高性能和可靠性,以及万亿级容量和灵活的扩展性。

体系架构

image

RocketMQ 主要包含 4 部分,它们中的每一部分都可以在非单点失败的情况下进行水平扩展。

  • NameServers
  • Brokers
  • Producers
  • Consumers

NameServer Cluster(命名服务集群)

NameServers 提供发现和路由的轻量级服务。集群中每个 NameServer 记录完整的路由信息,提供相应的读写服务,支持快速存储扩展。

NameServer(命名服务)

NameServer 是一个功能齐全的服务,主要包含以下 2 个特性:

  • Broker 管理

    NameServer 接受来自 Broker 集群的注册,并提供监测 Broker 是否存活的心跳机制。

  • 路由管理

    每个 NameServer 保存 Broker集群的整个路由信息以及客户端查询的队列信息。

正如我们所知,RocketMQ 客户端(Producer & Consumer)通过 NameServer 获取队列路由信息,但客户端是如何知道 NameServer 地址的呢?获取 NameServer 地址列表的 4 种方式:

  • 编写程序 producer.setNamesrvAddr("ip:port")
  • Java 选项 rocketmq.namesrv.addr
  • 环境变量 NAMESRV_ADDR
  • HTTP 端点

Broker Cluster(代理集群)

Brokers 通过轻量级的 TOPIC 和 QUEUE 机制满足消息存储。他们支持 Push 和 Pull 两种模式,包含容错机制(拷贝2-3份),并提供了强大的填补高峰和积累数以百亿计的消息在其原来的时间顺序的能力(这句没看懂) 。此外,Brokers 也提供灾难恢复,丰富的指标统计和预警机制。

Broker Server(代理服务)

Broker Server 负责消息的存储、交付、消息查询与 HA 保证等。

image

Broker Server 重要的子模块:

  • 远程模块 - Broker 入口,处理来自客户端的请求。
  • 客户端管理 - 管理客户端(Producer & Consumer)和维护消费者的主题订阅。
  • 存储服务 - 提供简单的API来存储或查询物理磁盘中的消息。
  • HA 服务 - 提供主从 Broker 间的数据同步功能。
  • 索引服务 - 按指定的键为消息建立索引,并提供快速的消息查询。

Producer Cluster(生产者集群)

Producers 支持分布式部署。分布式 Producers 通过负载均衡模型向 Brokers 集群发送消息,发送过程支持快速失败及低延迟。

Consumer Cluster(消费者集群)

Consumers 在 Push 和 Pull 两种模式下支持分布式部署。它也支持集群消费和消息广播。它提供实时的消息订阅机制,可以满足大多数消费者的需求。


更多信息请参考官方:https://rocketmq.apache.org/

本文记录了创建自己的 Hexo 博客过程。

环境准备

Node.js:https://nodejs.org/zh-cn/

Git:https://git-scm.com/

Hexo

如果需要搭建自己的博客(网站),强烈推荐查看官网教程。Hexo:http://hexo.io/

安装

1
npm install -g hexo-cli

通过 hexo --version 验证 Hexo 是否安装成功。

初始化

1
2
3
hexo init <dir>
cd <dir>
npm install

执行成功后,即站点完成初始化工作。

启动服务

1
hexo server

启动成功后,访问:http://localhost:4000/

image

NexT

自己的博客选择了 NexT 主题,详细说明请查看官网教程。NexT:http://theme-next.iissnan.com/

安装

1
2
cd my-hexo-site
git clone https://github.com/iissnan/hexo-theme-next themes/next

启用

修改文件 my-hexo-site/_config.ymltheme 属性值为 next ,重启服务。

image

切换 Scheme

NexT 支持多种外观风格,默认使用 Muse,如上图。

修改文件 my-hexo-site/themes/next/_config.ymlscheme属性值为 Pisces 来切换风格。

1
2
3
#scheme: Muse
#scheme: Mist
scheme: Pisces

image

NexT 还有更丰富的配置及第三方扩展,具体请查看官网。

感谢

感谢 Hexo ,感谢 NexT,感谢 OpenSource,让我们能够方便的定制自己的站点。

本文只是记录 ActiveMQ 服务的基本部署和消息的简单测试应用。

体系架构

image

核心概念

  • 消息流

    消息生产者(Producer) –> 中间件(Broker) –> 消息消费者(Consumer)

  • 两种模型

    • Point to Point(点对点)
    • Publish/Subscribe(发布/订阅)

服务部署

参考:http://activemq.apache.org/getting-started.html

本文实践环境说明:Windows 10 专业版,JDK 1.8.0_65。

1. 下载

http://activemq.apache.org/download.html

(目前最新版本5.15.2)

2. 安装 & 启动服务

解压 apache-activemq-5.15.2-bin.zip<ActiveMQ_installed_dir>

1
%ACTIVEMQ_HOME%\bin\activemq start

3. Web控制台

URL:http://127.0.0.1:8161/admin/
Login:admin
Password:admin

通过 conf/jetty-real.properties 配置用户名密码

4. 日志文件

1
%ACTIVEMQ_HOME%/data/activemq.log

5. 停止服务

1
%ACTIVEMQ_HOME%/bin/activemq stop

示例

先决条件:消息服务(中间件)已启动。

1. 启动消息消费者

1
%ACTIVEMQ_HOME%/bin/activemq consumer

2. 启动消息生产者

  • 自定义文本

    1
    %ACTIVEMQ_HOME%/bin/activemq producer --message "My message" --messageCount 1
  • 定长字节消息

    1
    %ACTIVEMQ_HOME%/bin/activemq producer --messageSize 100 --messageCount 1
  • 更多信息

    http://activemq.apache.org/version-5-examples.html

总结

本文对 ActiveMQ 进行了基础入门实践练习,以便更好的认识 ActiveMQ。

更多信息请查看官网:http://activemq.apache.org/

(END)

Start a working area

init

  • 在当前目录[指定目录]初始化工作空间

    1
    git init [<dir>]

    clone

  • 将指定工作空间拷贝到当前目录[指定目录]

    1
    git clone <repo> [<dir>]

    Work on the current change

add

  • 将文件添加到中转区(路径/文件名)

    1
    git add octocat.txt 
  • 将文件添加到中转区(文件通配符,匹配到的文件都将会添加到中转区)

    1
    git add '*.txt'

    reset

  • 将HEAD重置到某一个状态(路径/文件名,若不指定则对所有提交生效)

    1
    git reset octofamily/octodog.txt

    rm

  • 删除指定文件(文件名/文件通配符)

    1
    git rm '*.txt'

    Examine the history and state

status

  • 查看当前仓库状态

    1
    git status

    log

  • 查看仓库变更日志

    1
    git log

    Grow, mark and tweak your common history

commit

  • 将中转区的变更提交到仓库(说明内容)

    1
    git commit -m "Add cute octocat story" 

    checkout

  • 切换分支(–路径/文件名)

    1
    git checkout --octocat.txt
  • 切换分支(<分支名称>)

    1
    git checkout <BranchName>

    branch

  • 创建分支(<分支名称>)

    1
    git branch <BranchName>
  • 删除分支(<分支名称>)

    1
    git branch -d <BranchName>

    diff

  • 查看更改差异:查看上次提交的不同之处

    1
    git diff
  • 查看更改差异:HEAD为最新提交指针代码

    1
    git diff HEAD
  • 查看更改差异:查看中转区的更改差异

    1
    git diff --staged

    merge

  • 合并其他分支到当前分支(<其他分支名称>)

    1
    git merge <BranchName>

    Collaborate

push

  • 将本地分支推送到远程仓库(<远程仓库名称> <本地分支名称>)
    1
    git push -u <origin> <master>
  • u告诉Git记住参数,这样下次我们可以简单地运行git push

pull

  • 拉取远程仓库变更到本地分支(<远程仓库名称> <本地分支名称>)
    1
    git pull <origin> <master>

    remote

remote add

  • 添加远程仓库(<远程仓库名称> <远程仓库地址>)
    1
    git remote add <origin> <https://github.com/try-git/try_git.git>

视图

筛选包含某表的视图列表

1
2
3
SELECT t.viewschema, t.viewname
FROM syscat.viewdep t
WHERE t.bname = UPPER ('#table') AND t.viewschema = '#schema';

筛选系统字段表

1
2
3
4
5
6
7
8
  SELECT *
FROM syscat.columns c
WHERE EXISTS
(SELECT 1
FROM syscat.tables t
WHERE owner = '#schema' AND t.TABNAME = c.TABNAME)
AND UPPER (c.COLNAME) LIKE '%#column%'
ORDER BY c.TABNAME;