SpringAMQP - 消息传输时,如何提高性能?解决 SQL 注入问题?

这篇具有很好参考价值的文章主要介绍了SpringAMQP - 消息传输时,如何提高性能?解决 SQL 注入问题?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、问题背景

二、从消息转化器根源解决问题

1.引入依赖

2.在服务生产者和消费者中都重新定义一个 MessageConverter,注入到 Spring 容器中


一、问题背景


SpringAMQP的发送方法中,接收消息的类型是Object,也就是说我们可以发送任意对象类型的消息,接下来做个小实验

如下,注入一个队列到容器中,接着在提供一个服务生产者供测试,发送一个对象数据,观察 RabbitMQ 客户端队列数据形式

@Configuration
public class FanoutConfig {

    @Bean
    public Queue objectQueue() {
        return new Queue("object.queue");
    }

}
    @Test
    public void testObjectMessage() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("国家", "china");
        rabbitTemplate.convertAndSend("object.queue", map);
    }

 运行后,查看 RabbitMQ 队列数据如下:

SpringAMQP - 消息传输时,如何提高性能?解决 SQL 注入问题?,Spring Cloud,java,开发语言,rabbitmq

为什么发送的消息变成了这个样子呢?

这是因为SpringAMQP会帮我们序列化为字节后发送:Spring的对消息对象的处理是由org.springframework.amqp.support.converter.MessageConverter 来处理的。而默认实现是SimpleMessageConverter,基于JDKObjectOutputStream完成序列化。 

但是这样的数据就有可能引发以下两种问题:

  1. 转化后数据过长,影响传输效率。
  2. 容易引发 sql 注入问题。

二、从消息转化器根源解决问题


我们只需要在服务生产者和消费者的 Spring 启动类中都重新定义一个 MessageConverter 类型的Bean即可。这里推荐用JSON方式序列化~

具体步骤如下:

1.引入依赖

因为服务生产者和服务消费者都需要 JSON 来序列化和反序列化,因此直接在的父类中引入依赖即可

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

2.在服务生产者和消费者中都重新定义一个 MessageConverter,注入到 Spring 容器中

使用 @Bean 注解注入即可

@SpringBootApplication
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

    @Bean
    public MessageConverter jsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

}
@SpringBootApplication
public class PublisherApplication {
    public static void main(String[] args) {
        SpringApplication.run(PublisherApplication.class);
    }

    @Bean
    public MessageConverter jsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }
    
}

再尝试发送数据,结果如下:

SpringAMQP - 消息传输时,如何提高性能?解决 SQL 注入问题?,Spring Cloud,java,开发语言,rabbitmq

Ps:注意发送方与接收方必须使用相同的MessageConverter

SpringAMQP - 消息传输时,如何提高性能?解决 SQL 注入问题?,Spring Cloud,java,开发语言,rabbitmq文章来源地址https://www.toymoban.com/news/detail-565401.html

到了这里,关于SpringAMQP - 消息传输时,如何提高性能?解决 SQL 注入问题?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【微服务】RabbitMQ&SpringAMQP消息队列

    🚩本文已收录至专栏:微服务探索之旅 👍希望您能有所收获 微服务间通讯有同步和异步两种方式: 同步通讯 :就像打电话,可以 立即得到响应 ,但是你却 不能跟多个人 同时通话。 异步通讯 :就像发消息,可以 同时与多个人 发送并接收消息,但是往往 响应会有延迟

    2024年02月16日
    浏览(59)
  • SpringCloud-基于SpringAMQP实现消息队列

    Spring AMQP作为Spring框架的一部分,是一套用于支持高级消息队列协议(AMQP)的工具。AMQP是一种强大的消息协议,旨在支持可靠的消息传递,特别适用于构建分布式系统。Spring AMQP构建在RabbitMQ之上,提供了在微服务架构中进行异步通信和消息传递的强大机制。 这个框架的设计

    2024年03月13日
    浏览(42)
  • 【Java】微服务——RabbitMQ消息队列(SpringAMQP实现五种消息模型)

    微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发送邮件可以同时与多个人收发邮件,但是往往响应会有延迟。 1.

    2024年02月08日
    浏览(60)
  • 如何提高深度学习性能

    可用于 对抗过度拟合并获得更好泛化能力的20 个提示、技巧和技术 如何从深度学习模型中获得更好的性能? 这是我最常被问到的问题之一。 可能会被问为: 如何提高准确率? ……或者可以反过来说: 如果我的神经网络表现不佳该怎么办? 我经常回答说:“ 我不太清楚,

    2024年02月12日
    浏览(28)
  • 局域网中如何使用飞鸽传书提高文件数据传输速度

    大家都知道,飞鸽传书在局域网中的作用是非常巨大的,合理的配置飞鸽传书,可以让局域网内传输速度与网卡标称传输速度一致,这个功能够吸引人吧,平时想要在局域网中传一部几个G的电影,需要很时间,甚至半个小时以上,但使用飞鸽传书可能仅仅需要几分钟便传输完

    2024年02月06日
    浏览(55)
  • DevOps团队如何提高Kubernetes性能

    今天,Kubernetes仍然是开发人员最需要的容器。Kubernets最初由 Google 工程师开发,作为跨本地、公共云、私有云或混合云托管的首选解决方案享誉全球。 来自Statista的报告显示,公共云中的Kubernetes市场份额在过去一年中上升了近30%。并且在拥有超过1000名员工的大型科技企业中

    2024年02月11日
    浏览(36)
  • 什么是SQL注入攻击,解释如何防范SQL注入攻击?

    SQL注入攻击是一种常见的网络攻击方式,攻击者通过在Web应用程序的查询语句中插入恶意代码,从而获取数据库中的敏感信息或者执行其他恶意操作。 为了防范SQL注入攻击,可以采取以下措施: 使用参数化查询:使用参数化查询可以避免攻击者通过查询语句中的参数注入恶

    2024年02月10日
    浏览(47)
  • SQL注入的一些示例及解决SQL注入的方法

    SQL注入是一种常见的网络攻击手段,攻击者通过把SQL命令插入到Web表单提交或输入框后面,盗取数据库信息,甚至控制数据库服务器。解决SQL注入的方法如下: 1、使用参数化查询: 参数化查询是一种预编译查询,该查询将参数和SQL语句分开,从而允许程序将参数值与SQL语句

    2023年04月09日
    浏览(41)
  • RabbitMQ - 基于 SpringAMQP 带你实现五种消息队列模型

    目录 一、SpringAMQP 1.1、概念 1.2、前置知识(实现案例前必看!) 1.2.1、创建队列 1.2.2、创建交换机 1.2.3、创建绑定 1.2.4、@RabbitListener 注解 a)情况一:queue 存在 b)情况二:queue 不存在  1.2.5、为什么更建议使用 @Bean 注解创建,而不是 @RabbitListener 注解创建? 1.3、案例实现

    2024年04月12日
    浏览(46)
  • 如何利用FPGA加速技术提高物理模拟性能

    物理模拟是计算机科学的一个重要领域,它涉及到模拟物理现象,如热力学、力学、电磁学等。物理模拟技术广泛应用于各个行业,如工业生产、交通运输、建筑工程、能源等。随着物理模拟技术的不断发展,计算能力和模拟精度的要求也不断提高。因此,如何提高物理模拟

    2024年04月13日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包