2017/02/28

Node.js+RabbitMQでメッセージの送受信をする3(Publish/Subscribe)

仕事でRabbitMQまわりの一部システムを担当することになった。フロントエンド畑の人なので、Node.jsをつかってRabbitMQのチュートリアルをテキトーに和訳し、他で得た知識で補足しながら勉強した内容をまとめていこうと思う。

今回はチュートリアル3「Publish/Subscribe」を学ぶ。



関連記事




今回学ぶこと


  • Publish/Subscribeメッセージモデル
  • Exchange
  • Temporary Queues
  • Binding

2017/02/27

JavaScriptでJSONをRailsのRansack用DSLに変換する

いろいろあってAPIサーバはRails+Ransackなのに、フロントエンドはRailsのビューテンプレートを使わずJavaScript+フレームワークのSPAを開発することがあった。

だから検索条件をAPIに渡すときに、むりやりRansackのDSLに変換しなければならなかった。これがまた不便で、複雑で、ツラすぎるので、なんとか汎用的にできないかとJavaScriptの連想配列をRansackのDSLに変換する方法を考えた。


そもそもRansackとは?


Ruby on Rails用に検索機能を簡単に実装するためのgemで、シンプルでかつ簡単に実装できる。
参考: ransack/GitHub

2017/02/24

Node.js+RabbitMQでメッセージの送受信をする2(Work queues)

仕事でRabbitMQまわりの一部システムを担当することになった。フロントエンド畑の人なので、Node.jsをつかってRabbitMQのチュートリアルをテキトーに和訳し、他で得た知識で補足しながら勉強した内容をまとめていこうと思う。

今回はチュートリアル2「Work queues」を学ぶ。



関連記事




今回学ぶこと


  • Work Queues
  • タスクの負荷分散
  • キューとメッセージの永続化

2017/02/22

Node.js+RabbitMQでメッセージの送受信をする1(Hello World)

仕事でRabbitMQまわりの一部システムを担当することになった。フロントエンド畑の人なので、Node.jsをつかってRabbitMQのチュートリアルをテキトーに和訳し、他で得た知識で補足しながら勉強した内容をまとめていこうと思う。

今回はチュートリアル1「Hello World!」を学ぶ。



関連記事




今回学ぶこと


  • RabbitMQの導入方法
  • Node.jsの導入方法
  • 基本的なメッセージのやりとり


2017/02/14

CentOS7.3にRabbitMQをインストールしてGUIで管理できるようにする

仕事でRabbitMQを使う機会があった。私自身はフロントエンド畑の人なので、メッセージングシステムの意味はわかるけど使ったことがなかったので、実験用サーバ(CentOS7.3)を用意して勉強してみようと思う。

今後、数回にわけてRabbitMQの基本、インストール、設定、使い方などをブログに書いていく。

今回は、インストール~設定までして、最終的にRabbitMQを使える状態にする。その過程でハマりにハマったので手順として残しておく。



RabbitMQ とは


いきなり「RabbitMQをCentOSにインストールした」と書き出したが、そもそもRabbitMQがなんなのか、どんなときに使われるのか説明する。

RabbitMQはAMQPを使用したメッセージ指向ミドルウェア。処理の命令をいったんキューイングして、逐一実行するためのメッセージングシステムのひとつ。

呼び出し側(Producer)がRabbitMQにメッセージを登録しておく。そして、呼び出される側(Consumer)がそのメッセージを受け取り実行する。このようにメッセージングシステムを間に挟むことで、呼び出し側と呼び出される側を完全に分離することができる。

呼び出し側はメッセージを登録しておくだけなのでレスポンスを待つ必要がなく、また呼び出される側もメッセージをひとつひとつ受け取り実行することで負荷分散ができる。またアプリケーションが万が一落ちたとしてもメッセージは残っているので、再起動後に実行できるなど障害にも強くなる。

※Producer/Consumerと書いたが、一般的にはPublisher/Subscriberという

2017/02/06

【JavaScript】オブジェクトの配列をKeyで集計(グルーピング)する方法

配列内のオブジェクトのキーを使って、抽出したり、集計したり、グルーピングしたいときがある。
// 元データ
[
  { name: 'taro', age: 10 },
  { name: 'jiro', age: 20, email: 'jiro@example.com' },
  { name: 'saburo', age: 30, email: 'saburo@example.com' }  
]

// 欲しいデータ(ユーザごとではなくそれぞれのフィールドでグルーピングしたい)
{
  name: ['taro', 'jiro', 'saburo'],
  age: [10, 20, 30],
  email: ['jiro@example.com', 'saburo@example.com']
}

このようにデータを変換するため、lodash(underscore.js)、ES2015(ES6)、ES5のそれぞれの実装方法をまとめる。

2017/02/01

【JavaScript】配列のシャッフルする(要素をランダムに並び替える)

重複なく、かつランダムな値がほしいときがある。たとえばトランプのカード(1〜13)をランダムに取得したい場合などだ。
そんなときに使える関数を、lodash、ES2015(ES6)、ES5(レガシーブラウザ対応)でそれぞれ実装してみた。

ちなみに今回シャッフルさせるために使ったアルゴリズムは「Fisher-Yatesのシャッフル」という名前がついているらしい。