RabbitMQ案例之Publish/Subscribe
来源:互联网 发布:网络安全教育手抄报 编辑:程序博客网 时间:2024/05/17 12:49
目的:把消息发到每一个消费者
如上图。在producer与queue之间还有一个交换机(exchange),producer把消息发送到exchange上,消费都拿着queue来bind到exchang上后。当producer发布消息时,consumer都可以收到信息。
EmitLog.java发日志:
package yy.rabbitstudy.publish;import java.io.IOException;import java.util.concurrent.TimeoutException;import org.omg.CORBA.PRIVATE_MEMBER;import org.springframework.amqp.core.ExchangeTypes;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;public class EmitLog { private static final String EXCHANGE_NAME="logs"; public static void main(String[] args) { Connection connection=null; Channel channel =null; try{ args=new String[]{"FirstMessage..","SecondMessage...","ThirdMessage..","FourthMessage..","FifthMessage...","6Message...","7Message...","8Message...","9Message...","10Message..."}; ConnectionFactory factory=new ConnectionFactory(); factory.setHost("localhost"); connection=factory.newConnection(); channel = connection.createChannel(); channel.exchangeDeclare(EXCHANGE_NAME, ExchangeTypes.FANOUT); System.out.println(channel.queueDeclare().getQueue()); for (String string : args) { String message = getMessage(new String[]{string}); //把消息发到exchange上 channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes()); System.out.println("[x] Sent" + message + ""); } }catch(Exception e){ }finally { if(channel!=null){ try { channel.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TimeoutException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(connection!=null){ try { connection.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } private static String getMessage(String[] strings){ if(strings.length<1)return "Hello World"; return joinString(strings, " "); } private static String joinString(String[] strings,String delimiter){ int length=strings.length; if(length==0)return ""; StringBuilder words=new StringBuilder(strings[0]); for(int i=1;i<length;i++){ words.append(delimiter).append(strings[i]); } return words.toString(); }}ReceiveLogs.java 是收日志的浪费者
package yy.rabbitstudy.publish;import java.io.IOException;import java.util.concurrent.TimeoutException;import org.springframework.amqp.core.ExchangeTypes;import com.rabbitmq.client.AMQP;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import com.rabbitmq.client.Consumer;import com.rabbitmq.client.DefaultConsumer;import com.rabbitmq.client.Envelope;public class ReceiveLogs { private final static String EXCHANGE_NAME ="logs"; public static void main(String[] args) throws IOException, TimeoutException { ConnectionFactory factory=new ConnectionFactory(); factory.setHost("localhost"); Connection connection=factory.newConnection(); Channel channel=connection.createChannel(); channel.exchangeDeclare(EXCHANGE_NAME, ExchangeTypes.FANOUT); String queueName=channel.queueDeclare().getQueue(); System.out.println("[*] Waiting for messages. to exit press CTRL+C "+queueName); channel.queueBind(queueName, EXCHANGE_NAME, ""); //把通道交给消费者 Consumer consumer = new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { String message = new String(body, "UTF-8"); System.out.println(" [x] Received '" + message + "'"); } }; boolean autoAck=true;//当autoAck为false的时候,当消费都收到信息后,会回复队列,我收到信息了。这样就不会造成队列的消息流失。 channel.basicConsume(queueName, autoAck, consumer); } }
0 0
- RabbitMQ案例之Publish/Subscribe
- RabbitMq之Publish/Subscribe
- RabbitMQ之Publish/Subscribe
- RabbitMQ之三 Publish/Subscribe
- python系列之 RabbitMQ -- Publish/Subscribe
- RabbitMQ Publish/Subscribe
- 柯南君:看大数据时代下的IT架构(6)消息队列之RabbitMQ--案例(Publish/Subscribe起航)
- RabbitMQ学习(三).NET Client之Publish/Subscribe
- RabbitMQ系列教程之三:发布\/订阅(Publish\/Subscribe)
- rabbitmq官方教程之发布与订阅(Publish/Subscribe)
- rabbitmq 教程 三 Publish/Subscribe
- RabbitMQ 入门四(Publish/Subscribe)
- rabbitmq学习3:Publish/Subscribe
- RabbitMQ Publish/Subscribe 发布/订阅
- rabbitmq学习3:Publish/Subscribe
- RabbitMQ学习笔记3;Publish/Subscribe
- Rabbitmq教程翻译(三)Publish/Subscribe
- rabbitmq(三)Publish/Subscribe(发布/订阅)
- 视觉研究的前世今生(上)王天珍(武汉理工大学)
- 如何用好FL Studio中的画笔工具
- DataGrid 初识
- 国内较快的maven镜像
- yum 时候出现Another app is currently holding the yum lock解决方法
- RabbitMQ案例之Publish/Subscribe
- Codeforces 101D
- 图的连通概念辨析
- DB2修改配置已实现大sql支持
- ionic跨域(CORS)问题
- BZOJ2335: [SCOI2011]飞镖
- Python学习笔记:函数
- Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
- Spring 系列: Spring 框架简介