RabbitMQ四种Exchange类型之Direct (Erlang)
来源:互联网 发布:数据分析的起源 编辑:程序博客网 时间:2024/06/17 17:46
Direct类型的Exchanges是处理路由键的,需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。如果一个队列绑定到该交换机上要求路由键为 “logs”,则只有路由键为“logs”的消息才被转发,不会转发路由键为"logs.error",只会转发路由键为"logs"。
如下图:
下面是代码实现!!!
消费者:
-module(mod_direct_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]).-include("common.hrl").-record(state, {routing_key = <<"">>}).start_link(RoutingKey) ->Server1 = lists:concat([?MODULE,erlang:binary_to_list(RoutingKey)]),Server2 = erlang:list_to_atom(Server1),gen_server:start_link({local,Server2}, ?MODULE, [RoutingKey], []).init([RoutingKey]) ->start(RoutingKey), {ok, #state{routing_key=RoutingKey}}.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(" [routing_key = ~p] receive messages is ~p~n",[State#state.routing_key,Msg]),{noreply, State};handle_info(Info, State) ->io:format("[routing_key = ~p] unknown messages is ~p~n", [State#state.routing_key,Info]), {noreply, State}.terminate(_Reason, _State) -> ok.code_change(_OldVsn, State, _Extra) -> {ok, State}.start(RoutingKey) ->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,now_time()]),QueueName = erlang:list_to_binary(Queue),%%声明队列amqp_channel:call(Channel, #'queue.declare'{queue = QueueName,auto_delete=true}),%%声明exchangeamqp_channel:call(Channel, #'exchange.declare'{ auto_delete =true,exchange = <<"direct">>, type = ?EXCHANGE_TYPE_DIRECT}),%%队列绑定到exchangeamqp_channel:call(Channel, #'queue.bind'{queue = QueueName, exchange = <<"direct">>,routing_key = RoutingKey}),io:format(" [routing_key = ~p] Waiting for messages......~n",[RoutingKey]),amqp_channel:subscribe(Channel, #'basic.consume'{queue = QueueName,no_ack = true}, self());{error,Resaon} ->io:format("[routing_key = ~p] connection rabbit error: ~p~n", [RoutingKey,Resaon]),Resaonend.now_time()->{A, B, _} = os:timestamp(), A * 1000000 + B.生产者:
-module(mod_direct_send).-export([send/2]).-include("common.hrl").send(Msg,RoutingKey) ->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'{routing_key = RoutingKey, exchange = <<"direct">>}, #amqp_msg{payload = Msg}),io:format("Sent '~p'~n",[Msg]),amqp_channel:close(Channel),amqp_connection:close(ConnectionPid);{error,Reason} ->Reasonend.
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">> ).-define(EXCHANGE_TYPE_DIRECT, <<"direct">> ).
祝生活愉快!!!
0 0
- RabbitMQ四种Exchange类型之Direct (Erlang)
- RabbitMQ四种Exchange类型之Direct (Java)
- RabbitMQ四种Exchange类型之Fanout (Erlang)
- RabbitMQ四种Exchange类型之Topic(Erlang)
- RabbitMQ四种Exchange类型之Headers(Erlang)
- RabbitMQ Exchange模式之Direct
- RabbitMQ四种Exchange类型之Fanout (Java)
- RabbitMQ四种Exchange类型之Topic (Java)
- RabbitMQ四种Exchange类型之Headers(Java)
- RabbitMQ Exchange 模式 - direct
- [Erlang 0089] RabbitMQ Exchange
- RabbitMQ的Exchange 模式之direct(指定模式)
- RabbitMQ的四种ExChange
- RabbitMQ:四种ExChange用法
- RabbitMQ三种Exchange模式(fanout,direct,topic)介绍
- RabbitMQ三种Exchange模式(fanout,direct,topic)
- RabbitMQ三种Exchange模式(fanout,direct,topic)
- rabbitmq direct、fanout、topic 三种Exchange java 代码比较
- spring加载xml配置文件
- Java -- HttpClient之Get请求
- JDK8内存模型浅析—消失的PermGen
- 8.Decorator-装饰模式
- 面试中常用的算法总结
- RabbitMQ四种Exchange类型之Direct (Erlang)
- MongoDB的一些基本操作命令(二)————聚集集合查询和索引
- PFM和PWM技术总结
- python调试(Debugging)入门学习
- 9.Proxy-代理模式
- char data[0]用法总结
- java 判断客户端访问设备的类型 的后台方法
- 简单又复杂的正则表达式RegExp
- java实现二叉树查找树