rabbitmq+Erlang 客户端编程

一个rabbitMQ客户端的管理应该包含以下内容:

1 获取 connection

2 获取 channel

3 定义 Exchange ,Queue

4 使用一个 Exchange 和 一个 Routingkey 将消息发送到对应的Queue上。

 

%% Author: root
%% Created: May 9, 2012
%% Description: TODO: Add description to rabbitmq_client_kun
-module(rabbitmq_client_kun).
-include("amqp_client.hrl").

-record(rabbit_client , { connection ,channel  }).
-compile([export_all]).
%%
%% new  rabbit client created
%%
connect()  ->
    {ok, Connection}=amqp_connection:start(#amqp_params_network{}),
    {ok, Channel}  = amqp_connection:open_channel(Connection),
    
    Client = #rabbit_client{
        connection = Connection,
        channel = Channel
    },
    {ok, Client}.
    
%%{ok,{state,<0,106,0>,<0,116,0>}}为返回结果,<>内为进程通道。Erlang语言的特点,每一句都是一个进程。

%%
%% setup Exchange, Queue
%%                                  主要包括 exchange queue binding。
setup_exchange_queue(Client) ->
    Channel = Client#rabbit_client.channel,     
    
    #'queue.declare_ok'{}
        =amqp_channel:call(Channel, #'queue.declare'{queue = << "kun_Q">>}),

  Declare = #'exchange.declare'{ exchange = <<"kun_exchange">>},
    
        #'exchange.declare_ok'{}  = amqp_channel:call(Channel, Declare),
    
    
    % bind queue to exchange
    %%Binding = #'queue.unbind'{}
    #'queue.bind_ok'{} =
    amqp_channel:call( Channel, #'queue.bind'{queue = <<"kun_Q">> ,exchange= <<"kun_exchange">>}),
    
    ok.
%%
%%  Publish a message
%%

publish_msg(Client) ->
        Channel = Client#rabbit_client.channel,
        Payload = <<"Hello kun">>,
        Exchange =  <<"kun_exchange">>,
%%        Publish = #'basic.publish'{exchange = << >> ,routing_key = Q},
        amqp_channel:cast(Channel, #'basic.publish'{exchange = Exchange}, #'amqp_msg'{payload=Payload}),
        
        
        ok.

%%
%% Receiving Message
%%
rec_message(Client) ->
    %% Queue = <<"kun_Q">>,
    Channel = Client#rabbit_client.channel,
    Get = #'basic.get'{queue = <<"kun_Q">> ,no_ack= true},
    {#'basic.get_ok'{} ,Content } = amqp_channel:call(Channel, Get),
    #amqp_msg{payload = Payload} = Content.
%
rece_message(Client) ->
    
    Channel = Client#rabbit_client.channel,
    case amqp_channel:call(Channel, #'basic.get'{queue = <<"kun_Q">> , no_ack = false}) of
        {#'basic.get_ok'{delivery_tag = DeliveryTag} , #amqp_msg{payload = Payload}} -> {ok , {DeliveryTag , Payload}};
        #'basic.get_empty'{} -> {ok , []};
        Other  -> {error , Other}
    end.

%%
%%  closing channels and the connection
%%
close(Client) ->
    Channel = Client#rabbit_client.channel,
    Connection = Client#rabbit_client.connection,
    amqp_channel:close(Channel),
    amqp_channel:close(Connection),
    ok.

%%
%% 测试函数,用于测试函数的正确与否。Erlang中经常这样做,方便检查程序。
%%

test() ->
    {ok, Client} = connect(),
    setup_exchange_queue(Client),
    publish_msg(Client),
    rece_message(Client).



转载于:https://www.cnblogs.com/wkp4666/archive/2012/05/09/2493295.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值