package cn.slimsmart.rabbitmq.demo.workqueue;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
public class Work {
//队列名称
private final static String QUEUE_NAME = "workqueue-durable";
public static void main(String[] args) throws Exception {
//区分不同工作进程的输出
int hashCode = Work.class.hashCode();
//创建连接和频道
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("192.168.101.174");
//指定用户 密码
factory.setUsername("admin");
factory.setPassword("admin");
//指定端口
factory.setPort(AMQP.PROTOCOL.PORT);
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
boolean durable = true; //设置消息持久化 RabbitMQ不允许使用不同的参数重新定义一个队列,所以已经存在的队列,我们无法修改其属性。
//声明队列
channel.queueDeclare(QUEUE_NAME, durable, false, false, null);
QueueingConsumer consumer = new QueueingConsumer(channel);
/**
* ack= true: Round-robin 转发 消费者被杀死,消息会丢失
* ack=false:消息应答 ,为了保证消息永远不会丢失,RabbitMQ支持消息应答(message acknowledgments)。
* 消费者发送应答给RabbitMQ,告诉它信息已经被接收和处理,然后RabbitMQ可以自由的进行信息删除。
* 如果消费者被杀死而没有发送应答,RabbitMQ会认为该信息没有被完全的处理,然后将会重新转发给别的消费者。
* 通过这种方式,你可以确认信息不会被丢失,即使消者偶尔被杀死。
* 消费者需要耗费特别特别长的时间是允许的。
*
*/
boolean ack = false ; //打开应答机制
// 指定消费队列
channel.basicConsume(QUEUE_NAME, ack, consumer);
//公平转发 设置最大服务转发消息数量 只有在消费者空闲的时候会发送下一条信息。
int prefetchCount = 1;
channel.basicQos(prefetchCount);
while (true)
{
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
String message = new String(delivery.getBody());
System.out.println(hashCode + " Received Message:'" + message + "'");
doWork(message);
System.out.println(hashCode + " Received Done");
//发送应答
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}
}
/**
* 每个点耗时1s
* @param task
* @throws InterruptedException
*/
private static void doWork(String task) throws InterruptedException
{
for (char ch : task.toCharArray())
{
if (ch == '.')
Thread.sleep(1000);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
rabbitmq-demo学习实例
共44个文件
java:35个
xml:8个
properties:1个
5星 · 超过95%的资源 需积分: 20 207 下载量 103 浏览量
2014-11-08
19:31:17
上传
评论
收藏 35KB RAR 举报
温馨提示
rabbitmq学习实例,几种交换类型的demo和与spring结合的demo
资源推荐
资源详情
资源评论
收起资源包目录
rabbitmq-demo.rar (44个子文件)
pom.xml 3KB
src
test
resources
java
main
resources
applicationContext-rabbitmq-sync.xml 2KB
Producer.xml 2KB
application.properties 258B
applicationContext-rabbitmq.xml 4KB
applicationContext-rabbitmq-async-receive.xml 3KB
Consumer.xml 2KB
applicationContext-rabbitmq-async-send.xml 2KB
applicationContext.xml 1KB
java
cn
slimsmart
rabbitmq
demo
workqueue
Work.java 3KB
Task.java 2KB
route
ReceiveLogsDirect.java 2KB
SendLogDirect.java 2KB
headers
Producer.java 2KB
Consumer.java 2KB
rpc
RPCMain.java 361B
RPCServer.java 3KB
RPCClient.java 2KB
helloword
Receive.java 2KB
Send.java 1KB
fanout
ReceiveLogsToConsole.java 2KB
SendLog.java 2KB
ReceiveLogsToFile.java 3KB
spring
tag
ConsumerMain.java 266B
User.java 322B
ProducerMain.java 654B
ReceiveMessageListener.java 341B
Gson2JsonMessageConverter.java 3KB
async
Producer.java 286B
ReceiveMsgHandler.java 182B
Receive.java 295B
ConsumerConfiguration.java 2KB
ProducerConfiguration.java 3KB
Send.java 704B
Consumer.java 284B
sync
BrokerConfigurationApplication.java 650B
Producer.java 581B
AnnotationConfiguration.java 3KB
Consumer.java 562B
xml
Producer.java 615B
Consumer.java 639B
topic
ReceiveLogsTopicForKernel.java 2KB
ReceiveLogsTopicForCritical.java 2KB
SendLogTopic.java 1KB
共 44 条
- 1
slimina
- 粉丝: 421
- 资源: 67
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页