RabbitMQ四种Exchange类型之Fanout (Erlang)

我的个人博客网站云诺说上线啦!所有文章都搬到新地址了,点击围观吧!

关于RabbitMQ四种Exchange类型的介绍请看这篇博客,这里只贴出用Erlang实现的代码。

消费者:

-module(mod_fanout_receive).
-behaviour(gen_server).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).

-export([start_link/1,start/1]).
-include("common.hrl").

-record(state, {}).

%% 启动Num个server
start(Num) ->
	lists:foreach(
	  fun(N) -> 
			  start_link(erlang:list_to_atom(lists:concat([?MODULE,N]))) 
	  end , lists:seq(1, Num)).

start_link(Server) ->
	gen_server:start_link({local,Server}, ?MODULE, [], []).


init([]) ->
	start(),
    {ok, #state{}}.

handle_call(_Request, _From, State) ->
    Reply = ok,
    {reply, Reply, State}.


handle_cast(_Msg, State) ->
    {noreply, State}.

handle_info({'basic.consume_ok',_}, State) ->
	{noreply, State};
handle_info({#'basic.deliver'{},#amqp_msg{payload=Msg}}, State) ->
	io:format(" [~p] receive  messages is ~p~n",[self(),Msg]),
	{noreply, State};

handle_info(Info, State) ->
	io:format("[~p] unknown messages is ~p~n", [self(),Info]),
    {noreply, State}.


terminate(_Reason, _State) ->
    ok.

code_change(_OldVsn, State, _Extra) ->
    {ok, State}.

start() ->
	Params = #amqp_params_network{host=?HOST,username=?USER_NAME,password=?PASSWORD},
	case amqp_connection:start(Params) of
		{ok,ConnectionPid} ->
			{ok, Channel} = amqp_connection:open_channel(ConnectionPid),
			%%生成队列名称
			Queue = lists:concat([fanout_queue,erlang:pid_to_list(self())]),
			QueueName = erlang:list_to_binary(Queue),
			%%声明队列
			amqp_channel:call(Channel, #'queue.declare'{queue = QueueName}),
			%%声明exchange
			amqp_channel:call(Channel, #'exchange.declare'{exchange = <<"logs">>, type = ?EXCHANGE_TYPE_FANOUT}),
			%%队列绑定到exchange
			amqp_channel:call(Channel, #'queue.bind'{queue = QueueName, exchange = <<"logs">>}),
			io:format(" [~p] Waiting for messages......~n",[self()]),
			amqp_channel:subscribe(Channel, #'basic.consume'{queue = QueueName,no_ack = true}, self());
		{error,Resaon} ->
			io:format("[~p] connection rabbit error: ~p~n", [self(),Resaon]),
			Resaon
	end.

生产者:

 

 

-module(mod_fanout_send).

-export([send/1]).
-include("common.hrl").

send(Msg) ->
	Params = #amqp_params_network{host=?HOST,username=?USER_NAME,password=?PASSWORD},
	case amqp_connection:start(Params) of
		{ok,ConnectionPid} ->
			{ok, Channel} = amqp_connection:open_channel(ConnectionPid),
			amqp_channel:cast(Channel,
							  #'basic.publish'{
											   exchange = <<"logs">>},
							  #amqp_msg{payload = Msg}),
			io:format("Sent '~p'~n",[Msg]),
			amqp_channel:close(Channel),
			amqp_connection:close(ConnectionPid);
		{error,Reason} ->Reason
	end.

common头文件:

 

 

-include("amqp_client_internal.hrl").

-define(USER_NAME 	, <<"test">>).
-define(PASSWORD 	, <<"test">>).
-define(HOST	 	, "192.168.249.128").
-define(PORT	 	, 5672).


%%exchanges type
-define(EXCHANGE_TYPE_FANOUT, <<"fanout">>).

结果如下:

 


祝生活愉快!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值