消息中间件-ActiveMQ常用API(P2P)

PTP


持久化(生产者)

默认开启持久化

producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//关闭持久化

事务(生产者/消费者)

session.commit();
session.rollback();

签收模式(消费者)

    int AUTO_ACKNOWLEDGE = 1;//自动签收
    int CLIENT_ACKNOWLEDGE = 2;//手动签收,mess.acknowledge();
    int DUPS_OK_ACKNOWLEDGE = 3;//不必确保客户端签收,容易造成重复投递
    int SESSION_TRANSACTED = 0;//客户端session开启事务后,覆盖后续参数为SESSION_TRANSACTED,需要ack后,进行commite()

优先级(生产者)

producer.setPriority
<policyEntry queue="queue1" prioritizedMessages="true" />

消息类型(生产者/消费者)

常用消息类型

MapMessage
BytesMessage
TextMessage

添加序列化信任(生产者)

factory.setTrustedPackages(list);

字节流消息(生产者/消费者)

注意发送消息与接受消息顺序要一致

死信队列(生产者)

producer.setTimeToLive(1000);//设置超时时间,超过时间进入死信队列,死信队列不会自动清除,有消息堆积的风险
ActiveMQ.DLQ

设置不进行持久化,producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT),不会进入DB,也不会进入死信队列
processNonPersistent="true",不进行持久化也会进入死信队列。进入死信队列后,进入DB存储
processExpired="false"  过期消息不进入死信队列。非持久化在过期后直接的dequeued,持久化首先进入DB,在过期后直接dequeued。

consumer监控死信队列,消息重投,保证不丢失消息

独占消费者(消费者)

保证强一致性,但有可能造成消息堆积

	Queue queue = session.createQueue("des?consumer.exclusive=true");//独占
	Queue queue = session.createQueue("des?consumer.exclusive=true&consumer.priority=10");//优先级

分组(生产者/消费者)

消息消费负载均衡

//消息生产者
message.setDoubleProperty("num",i);
//消息消费者
 MessageConsumer consumer = session.createConsumer(destination,"num>1");

异步发送消息(生产者)

异步发送消息提升性能,持久化,关闭事务的情况是同步的

//设置异步
connectionFactory.setUseAsyncSend(true);

延迟投递(生产者)

//broker
schedulerSupport="true"

message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 10*1000);
//支持CRON表达式进行定时执行

		//时间间隔重复投递,MQ的重复投递
		long delay = 10 * 1000;
		long period = 2 * 1000;
		int repeat = 9;
		message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);
		message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, period);
		message.setIntProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, repeat);
		createProducer.send(message);

消息过滤(生产者/消费者)

		String selector1 = "age > 17";
		String selector2 = "name = 'lucy'";
		MessageConsumer consumer = session.createConsumer(queue,selector2);

注意事项

在这里插入图片描述
默认为100gb,但实际取决于启动时的磁盘大小,如果低于100,如50g。则最大为50g

独占消费者和过滤器有可能会造成broker消息堆积,消息推拉到消费者无法处理,消息堆积在broker中,造成生产者无法推送消息。
改进策略,将较老的消息清除掉等等,避免消息堆积。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值