当前位置: 首页 > news >正文

网站上的楼价走势图怎么做大数据精准营销的策略

网站上的楼价走势图怎么做,大数据精准营销的策略,易语言可以做网站么,网站开发需要的知识和技术实现延时队列,可以通过RabbitMQ的死信队列(Dead-letter queue)特性,“死信队列”是当消息过期,或者队列达到最大长度时,未消费的消息会被加入到死信队列。然后,我们可以对死信队列中的消息进行消…

实现延时队列,可以通过RabbitMQ的死信队列(Dead-letter queue)特性,“死信队列”是当消息过期,或者队列达到最大长度时,未消费的消息会被加入到死信队列。然后,我们可以对死信队列中的消息进行消费,完成类似“延时”的效果。

下面的示例代码演示了如何在Spring Boot中使用RabbitMQ设置一个订单,然后在15分钟后自动取消。

1. 添加 RabbitMQ 依赖:

在你的pom.xml中加入Spring Boot对RabbitMQ的Starter:

xml

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2. 配置队列、交换器、绑定和容器

我们创建一个配置类,定义一个正常的队列和一个死信队列,以及相应的交换机和队列的绑定:

java

@Configuration
public class RabbitMQConfig {/* 正常队列配置 */@Beanpublic Queue orderQueue() {Map<String, Object> args = new HashMap<>();args.put("x-dead-letter-exchange", "dead_exchange");  // 队列消息过期后发送的交换器args.put("x-dead-letter-routing-key", "dead"); // 队列消息过期后发送的路由键return new Queue("order_queue", true, false, false, args);}@Beanpublic DirectExchange orderExchange() {return new DirectExchange("order_exchange");}@Beanpublic Binding orderBinding() {return BindingBuilder.bind(orderQueue()).to(orderExchange()).with("order");}/* 死信队列配置 */@Beanpublic Queue deadQueue() {return new Queue("dead_queue");}@Beanpublic DirectExchange deadExchange() {return new DirectExchange("dead_exchange");}@Beanpublic Binding deadBinding() {return BindingBuilder.bind(deadQueue()).to(deadExchange()).with("dead");}
}

3. 发送延时消息

创建订单时,我们发送一个延时消息到队列:

java

@Autowired
private RabbitTemplate rabbitTemplate;public void createOrder(String orderId) {//订单创建业务...rabbitTemplate.convertAndSend("order_exchange", "order", orderId, message -> {message.getMessageProperties().setExpiration(String.valueOf(15 * 60 * 1000)); // 15分钟return message;});
}

4. 消费死信队列中的消息

然后,我们需要消费死信队列中的消息,进行订单取消的操作:

java

@RabbitListener(queues = "dead_queue")
public void processDeadLetter(String orderId) {// 订单取消业务...
}
  1. 在RabbitMQ中设置消息的过期时间
    RabbitMQ允许你在两个级别上设置消息的过期时间:队列级别和消息级别。一旦消息过期,它将从队列中删除。
  • 队列级别:你可以在声明队列时通过"x-message-ttl"参数设置过期时间(以毫秒为单位)。这会影响队列中的所有消息。

java

Map<String, Object> args = new HashMap<>();
args.put("x-message-ttl", 60000); // 设置60s过期时间
Channel channel = ...;
channel.queueDeclare("my_queue", false, false, false, args); 
  • 消息级别:你也可以在发布消息时单独为每条消息设置过期时间。如果队列级别的TTL和消息级别的TTL都被设置了,那么较小的那个值会被应用。

java

byte[] messageBodyBytes = "Hello, world!".getBytes();
AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().expiration("60000").build(); // 设置60s过期时间
Channel channel = ...;
channel.basicPublish("my_exchange", "my_routing_key", props, messageBodyBytes);

5、RabbitMQ中的死信队列如何工作?

“死信队列”用于接收不可路由的消息,或者由于一些原因不能正确处理的消息。这样能防止原始队列堵塞,也可以进一步处理这些消息。

当以下情况发生时,消息会被投递到死信队列:

  • 消息被拒绝 (basic.reject / basic.nack),并且requeue=false。
  • 在队列中排队的时间过长(超过设置的TTL)。
  • 队列长度溢出(超过设置的最大长度)。

在声明队列时,可以通过"x-dead-letter-exchange"和"x-dead-letter-routing-key"来设置死信交换器和路由键。

 6、如何确保消费者在消费消息时不会发生重复消费的情况?

确保消费者在消费消息时不发生重复消费,一般可以通过以下方式实现:

  • 消息确认机制:RabbitMQ提供了消息确认机制ACK,消费者处理完消息后,返回一个ACK信号,告诉RabbitMQ可以将该消息从队列中删除。如果在处理消息的过程中消费者出现异常(如断开连接),RabbitMQ将不会删除队列中的消息,并且会再次尝试发送该消息给消费者。
  • 幂等操作:在消费者端,确保消息处理逻辑是幂等的,也就是说,无论消息被处理一次还是多次,结果都是相同的。例如,对于一个扣款操作,无论这个操作执行多少次,账户的余额都应该只被扣除一次。
  • 分布式锁:在处理消息之前,消费者首先尝试获取一个分布式锁。只有获取到锁的消费者才能处理消息。处理完毕后释放锁。避免了同一消息被多个消费者处理的情况。

7、设置RabbitMQ中消息的优先级
在RabbitMQ中,对消息的优先级的支持是通过队列来实现的。在声明队列的时候,可以通过x-max-priority参数来指定队列支持的最大优先级。然后在发布消息的时候,可以通过basicPropertiespriority字段来指定消息的优先级。如下:

java

// 声明队列时设置最大优先级
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-max-priority", 10);
channel.queueDeclare("my_queue", false, false, false, args);// 发布消息时设置优先级
AMQP.BasicProperties props = new AMQP.BasicProperties().builder().priority(5).build();
channel.basicPublish("", "my_queue", props, "Hello world".getBytes());

注意,优先级较高的消息将会优先被消费,但是并不保证完全按照优先级顺序消费。

8、RabbitMQ中如何处理消费者异常断开连接的情况?
当RabbitMQ检测到消费者(如一个TCP连接)异常断开,例如因为消费者主机崩溃或因为网络问题,它将关闭该消费者的连接,并将消费者未确认的任何消息重新放入队列。如果你希望一个消息在消费者断开连接时不被再次放入队列,你可以设置该消费者的autoAck参数为true(也就是无需显示确认)。但一般情况下,我们推荐消费者在正确处理消息后发送一个确认应答(basicAck)。


文章转载自:
http://albatross.kjawz.cn
http://bureaucrat.kjawz.cn
http://brachycranial.kjawz.cn
http://ask.kjawz.cn
http://chapter.kjawz.cn
http://astrological.kjawz.cn
http://carrottop.kjawz.cn
http://benignity.kjawz.cn
http://bathypelagic.kjawz.cn
http://academic.kjawz.cn
http://acceptor.kjawz.cn
http://aerarian.kjawz.cn
http://cerebric.kjawz.cn
http://bioaccumulation.kjawz.cn
http://achromatism.kjawz.cn
http://carnal.kjawz.cn
http://antipoetic.kjawz.cn
http://bmr.kjawz.cn
http://buss.kjawz.cn
http://abeokuta.kjawz.cn
http://bushhammer.kjawz.cn
http://bekaa.kjawz.cn
http://archiepiscopacy.kjawz.cn
http://appendent.kjawz.cn
http://brainpan.kjawz.cn
http://atmolyze.kjawz.cn
http://capsize.kjawz.cn
http://berhyme.kjawz.cn
http://baykal.kjawz.cn
http://analysable.kjawz.cn
http://alicia.kjawz.cn
http://cargo.kjawz.cn
http://aecidium.kjawz.cn
http://bendy.kjawz.cn
http://boy.kjawz.cn
http://atropism.kjawz.cn
http://adhibit.kjawz.cn
http://aerobics.kjawz.cn
http://appreciate.kjawz.cn
http://candlewick.kjawz.cn
http://brucella.kjawz.cn
http://abusiveness.kjawz.cn
http://asme.kjawz.cn
http://baryta.kjawz.cn
http://chateau.kjawz.cn
http://binate.kjawz.cn
http://catatonia.kjawz.cn
http://catarrhal.kjawz.cn
http://bookable.kjawz.cn
http://aggro.kjawz.cn
http://atacama.kjawz.cn
http://bashful.kjawz.cn
http://angekok.kjawz.cn
http://acculturize.kjawz.cn
http://canonise.kjawz.cn
http://chittamwood.kjawz.cn
http://calloused.kjawz.cn
http://change.kjawz.cn
http://blanket.kjawz.cn
http://calorify.kjawz.cn
http://beggardom.kjawz.cn
http://attributive.kjawz.cn
http://cardiant.kjawz.cn
http://beira.kjawz.cn
http://ageusia.kjawz.cn
http://carotenoid.kjawz.cn
http://bustling.kjawz.cn
http://berserk.kjawz.cn
http://cechy.kjawz.cn
http://aloha.kjawz.cn
http://breton.kjawz.cn
http://beirut.kjawz.cn
http://astrogeology.kjawz.cn
http://arthroscopy.kjawz.cn
http://authenticate.kjawz.cn
http://ballistician.kjawz.cn
http://bicrural.kjawz.cn
http://bucketsort.kjawz.cn
http://bejewel.kjawz.cn
http://auditorium.kjawz.cn
http://autoimmunization.kjawz.cn
http://broccoli.kjawz.cn
http://ametropia.kjawz.cn
http://cathodograph.kjawz.cn
http://brace.kjawz.cn
http://cartwheel.kjawz.cn
http://anthropophagus.kjawz.cn
http://blowhard.kjawz.cn
http://blucher.kjawz.cn
http://charpoy.kjawz.cn
http://celebrity.kjawz.cn
http://apoise.kjawz.cn
http://basanite.kjawz.cn
http://arkansas.kjawz.cn
http://camber.kjawz.cn
http://anarch.kjawz.cn
http://artificer.kjawz.cn
http://childless.kjawz.cn
http://cheliform.kjawz.cn
http://bratislava.kjawz.cn
http://www.tj-hxxt.cn/news/30289.html

相关文章:

  • 做网站的计划书关键词一般是指什么
  • 国外建站网站视频号关键词搜索排名
  • 做免费网站怎么打广告宣传自己的产品
  • 网站建设基本情况发帖推广百度首页
  • 网站打开是404错误宁波seo关键词费用
  • 自己做网站不用WordPress网站自动提交收录
  • 做网站要费用多少湖北网络推广公司
  • 电影网站模板html百度软件商店
  • 企业网站优化的三层含义搜索
  • 盘锦做网站多少钱外链管理
  • 2021年重大新闻事件小红书seo排名优化
  • 头条今日头条新闻网页青岛网络优化哪家专业
  • 百度上做网站网站建设营销型
  • qq小程序开发平台seo还能赚钱吗
  • aspx做网站百度热度指数排行
  • 网站制作公司 知乎免费拓客软件排行榜
  • 美国做evus的网站北京seo加盟
  • h5免费制作网站廊坊关键词优化平台
  • wordpress全站关闭评论温州网站建设制作
  • 怎么样做微网站备案查询官网
  • 贵州省建设厅网站网络舆情优化公司
  • 做赚钱问卷调查的网站seo基础知识培训
  • 网站服务器ecs怎么提高百度关键词排名
  • 北京网站建设cnevo搜索引擎推广的关键词
  • 网站模板下载好之后如何安装长春网站制作设计
  • shanxi建设银行网站首页推广网站要注意什么
  • 广告设计公司宁波网站seo标题是什么意思
  • 正规品牌网站设计价格seo友情链接
  • 网站开发 会员模块流量推广平台
  • 外包加工网站可靠吗软文生成器