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

调查问卷在哪个网站做帆软社区app

调查问卷在哪个网站做,帆软社区app,温州网站定制,做网站的都改行做什么了这次主要选用RabbitMQ消息队列来对判题服务和题目服务解耦,题目服务只需要向消息队列发送消息,判题服务从消息队列中取信息去执行判题,然后异步更新数据库即可。 五一宝宝请快点跑~~~~~ 先回顾一下RabbitMQ (1)引入依…

这次主要选用RabbitMQ消息队列来对判题服务和题目服务解耦,题目服务只需要向消息队列发送消息,判题服务从消息队列中取信息去执行判题,然后异步更新数据库即可。

五一宝宝请快点跑~~~~~

先回顾一下RabbitMQ

(1)引入依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>2.7.2</version>
</dependency>

(2)在yml中引入配置

spring:rabbitmq:host: localhostport: 5672password: guestusername: guest

(3)创建交换机和队列

/*** 用于创建测试程序用到的交换机和队列(只用在程序启动前执行一次)*/
public class MqInitMain {public static void main(String[] args) {try {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");Connection connection = factory.newConnection();Channel channel = connection.createChannel();String EXCHANGE_NAME = "code_exchange";channel.exchangeDeclare(EXCHANGE_NAME, "direct");// 创建队列,随机分配一个队列名称String queueName = "code_queue";channel.queueDeclare(queueName, true, false, false, null);channel.queueBind(queueName, EXCHANGE_NAME, "my_routingKey");} catch (Exception e) {}}
}

(4)生产者代码

@Component
public class MyMessageProducer {@Resourceprivate RabbitTemplate rabbitTemplate;public void sendMessage(String exchange, String routingKey, String message) {rabbitTemplate.convertAndSend(exchange, routingKey, message);}}

(5)消费者代码

@Component
@Slf4j
public class MyMessageConsumer {// 指定程序监听的消息队列和确认机制@SneakyThrows@RabbitListener(queues = {"code_queue"}, ackMode = "MANUAL")public void receiveMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) {log.info("receiveMessage message = {}", message);channel.basicAck(deliveryTag, false);}}

(6)单元测试执行

@SpringBootTest
class MyMessageProducerTest {@Resourceprivate MyMessageProducer myMessageProducer;@Testvoid sendMessage() {myMessageProducer.sendMessage("code_exchange", "my_routingKey", "你好呀");}
}

项目实践

要传递的消息是什么?题目提交 id

题目服务中,把原本的本地异步执行改为向消息队列发送消息:

// 发送消息
myMessageProducer.sendMessage("code_exchange", "my_routingKey", String.valueOf(questionSubmitId));
// 执行判题服务
//        CompletableFuture.runAsync(() -> {
//            judgeFeignClient.doJudge(questionSubmitId);
//        });

判题服务中,监听消息,执行判题:

@Component
@Slf4j
public class MyMessageConsumer {@Resourceprivate JudgeService judgeService;// 指定程序监听的消息队列和确认机制@SneakyThrows@RabbitListener(queues = {"code_queue"}, ackMode = "MANUAL")public void receiveMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long deliveryTag) {log.info("receiveMessage message = {}", message);long questionSubmitId = Long.parseLong(message);try {judgeService.doJudge(questionSubmitId);channel.basicAck(deliveryTag, false);} catch (Exception e) {channel.basicNack(deliveryTag, false, false);}}}

消息确认机制:basicAck  basicNack

在 RabbitMQ 中,消息从生产者发送到队列,然后被消费者消费。为了确保消息被正确处理,RabbitMQ 提供了一种机制,让消费者可以确认消息是否已经被成功处理。这就是 消息确认机制

basicAck:

作用:消费者告诉 RabbitMQ,我已经成功处理了这条消息。

参数:

(1)deliveryTag:消息的唯一标识符,RabbitMQ 用它来跟踪每条消息。

(2)multiple:布尔值,表示是否确认多个消息。如果为 true,则确认所有小于等于deliveryTag 的消息;如果为 false,则只确认当前的 deliveryTag 消息。

 示例:

channel.basicAck(deliveryTag, false);

 这行代码的意思是:“我成功处理了 deliveryTag 指定的消息,请从队列中移除它。”

basicNack:

作用:消费者告诉 RabbitMQ,我无法处理这条消息。

参数

(1)deliveryTag:消息的唯一标识符。

(2)multiple:布尔值,表示是否拒绝多个消息。如果为 true,则拒绝所有小于等于 deliveryTag 的消息;如果为 false,则只拒绝当前的 deliveryTag 消息。

(3)requeue:布尔值,表示是否将消息重新放回队列。如果为 true,则将消息重新放回队列,等待其他消费者处理;如果为 false,则丢弃这条消息。

示例:

channel.basicNack(deliveryTag, false, false);

这行代码的意思是:“我无法处理 deliveryTag 指定的消息,请丢弃它。”

总结

basicAck:确认消息已成功处理,从队列中移除。

basicNack:确认消息处理失败,可以选择重新放回队列或丢弃。

http://www.dtcms.com/wzjs/154753.html

相关文章:

  • 做初中题赚钱的网站提高搜索引擎排名
  • 网站建设公司外链怎么做百度seo指数查询
  • 制作网站需要哪些技术人员怎样做网络推广
  • 政府网站发展指引建设规范关键字搜索引擎
  • 做电器哪个网站好搜索引擎广告投放
  • 长沙 外贸网站建设公司编程培训机构加盟哪家好
  • 网站建设中页面模板下载百度的推广方式有哪些
  • 你接入的网站不属于同一个主体怎样才能在百度上面做广告宣传
  • 网站怎么做流量互换网站站点
  • 国外网站怎么做威客宁波品牌网站推广优化公司
  • 网站建设的模块广告网站留电话不用验证码
  • 个人简历制作视频教程湖南专业seo推广
  • 营销型网站建设菲凡网创建网站的流程是什么
  • 网上商城网站建设公司百度搜索seo优化技巧
  • 潍坊装饰网站建设厦门网站外包
  • 网站建设全部流程图百度提交入口网址是什么
  • 济南电视台新闻频道网站seo专员
  • 西宁网站建设优化百度网盘在线登录入口
  • 做网站选择什么服务器搜索引擎推广的费用
  • 淘客做网站的话虚拟主机多大互联网推广营销方案
  • 动漫网站设计方案黑马程序员培训机构在哪
  • 华强北电子网站建设百度搜索排名推广
  • 视频直播系统源码百度seo视频教程
  • 网页设计与制作课程设计报告shu河北电子商务seo
  • 网站选服务器文件无锡百姓网推广
  • 视频网址链接哪里找昆明排名优化
  • ext做的网站成人职业培训机构
  • 做母婴产品的网站企业网站制作价格
  • wordpress 个人博客模板网站关键词快速优化
  • 如何网站公司小程序营销推广策划方案范文