西安商城网站建设咪豆/深圳网络营销和推广渠道

西安商城网站建设咪豆,深圳网络营销和推广渠道,jquery 网站源码,外国老头做中文网站1.MQ MQ全称 Message Queue(消息队列),是在消息的传输过程中 保存消息的容器。它是应用程序和应用程序之间的通信方法 1.1 为什么使用MQ 在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理&#xff0…

1.MQ

 MQ全称 Message Queue(消息队列),是在消息的传输过程中  保存消息的容器。它是应用程序和应用程序之间的通信方法

1.1 为什么使用MQ

在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高系统吞吐量

1.2MQ的好处

1.应用解耦   系统间通过消息通信,不用关心其他系统的处理。

2.异步提速  相比于传统的串行、并行方式,提高了系统吞吐量。

3.削峰填谷   可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。

简单来说: 就是在访问量剧增的情况下,但是应用仍然不能停,比如“双十一”下单的人多,但是淘宝这个应用仍然要运行,所以就可以使用消息中间件采用队列的形式减少突然访问的压力

使用MQ后,可以提高系统稳定性

1.3劣势

  1. 系统可用性降低 系统引入的外部依赖越多,系统稳定性越差。一旦 MQ 宕机,就会对业务造成影响。如何保证MQ的高可用?

  2. 系统复杂度提高 MQ 的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过 MQ 进行异步调用。如何保证消息没有被重复消费?怎么处理消息丢失情况?那么保证消息传递的顺序性?

  3. 一致性问题 A 系统处理完业务,通过 MQ 给B、C、D三个系统发消息数据,如果 B 系统、C 系统处理成功,D 系统处理失败。如何保证消息数据处理的一致性?

1.4常见的MQ组件

RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等

2.RabbitMQ

RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议 )的开源实现,由于erlang 语言的高并发特性,性能较好,本质是个队列,FIFO 先入先出,里面存放的内容是message

RabbitMQ是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑RabbitMQ是一个快递站,一个快递员帮你传递快件。RabbitMQ与快递站的主要区别在于,它不处理快件而是接收,存储和转发消息数据。

2.1RabbitMQ的原理

核心组件

  1. 生产者(Producer):负责发送消息到交换器的客户端应用程序。

  2. 消费者(Consumer):从队列中获取并处理消息的客户端应用程序。

  3. 交换器(Exchange):接收生产者发送的消息,并根据路由规则将消息转发到相应的队列。

  4. 队列(Queue):存储消息,直到消费者取走消息。

  5. 绑定(Binding):定义交换器和队列之间的关联关系。

工作流程

  1. 消息发送:生产者通过信道(Channel)将消息发送到交换器。

  2. 消息路由:交换器根据路由键(Routing Key)和绑定键(Binding Key)将消息路由到相应的队列。

  3. 消息存储:队列存储消息,等待消费者取走。

  4. 消息消费:消费者通过信道从队列中获取消息并处理。

交换器类型

  1. Direct:根据完全匹配的路由键将消息发送到相应的队列。

  2. Fanout:将消息广播到所有绑定的队列,不考虑路由键。

  3. Topic:根据模式匹配的路由键将消息发送到相应的队列。

2.2简单模式simple

生产者向队列投递消息,消费者从其中取出消息

1.依赖

<!--        java连接rabbitmq的依赖--><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.16.0</version></dependency>

2.生产消息

package com.ghx.hello;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** @author :guo* @date :Created in 2025/3/20 11:35* @description:* @version:*/
public class Test01 {public static void main(String[] args) throws IOException, TimeoutException {//创建连接工厂ConnectionFactory factory=new ConnectionFactory();//rabbitmq服务器地址 默认本地localhostfactory.setHost("xxxx");//端口号 默认5672factory.setPort(5672);//用户名 密码  默认guestfactory.setUsername("guest");factory.setPassword("guest");factory.setVirtualHost("/");//创建连接对象Connection connection=factory.newConnection();//获取channel对象Channel channel = connection.createChannel();//创建队列 存在则不创建,不存在则创建//String queue, 队列名// boolean durable, 是否持久化// boolean exclusive, 是否独占队列 false// boolean autoDelete,是否自动删除 false// Map<String, Object> arguments 队列的参数配置--消息的格式 消息存放的时间等channel.queueDeclare("hello",true,false,false,null);String msg="hello rabbitmq2";//String exchange,交换机的名称 "":默认交换机// String routingKey, 路由key "hello":队列名// BasicProperties props, 消息的属性--设置过期时间 设置id等 null// byte[] body  消息的内容channel.basicPublish("","hello",null,msg.getBytes());System.out.println("消息发送成功");channel.close();connection.close();}
}

3.消费消息

package com.ghx.hello;import com.rabbitmq.client.*;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** @author :guo* @date :Created in 2025/3/20 14:22* @description:* @version:*/
public class Test01 {public static void main(String[] args) throws IOException, TimeoutException {//创建连接工厂ConnectionFactory factory=new ConnectionFactory();//rabbitmq服务器地址 默认本地localhostfactory.setHost("xxxx");//端口号 默认5672factory.setPort(5672);//用户名 密码  默认guestfactory.setUsername("guest");factory.setPassword("guest");//虚拟机名称 默认/factory.setVirtualHost("/");//创建连接对象Connection connection = factory.newConnection();//获取channel对象Channel channel = connection.createChannel();DefaultConsumer consumer=new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("消费者1收到消息"+new String(body));}};//接受消息channel.basicConsume("hello",true,consumer);//不要关闭连接和channel  监听消息}
}

2.3工作者模式work queues

多个消费者消费同一个队列中的消息,多个消费者之间属于竞争关系,一个消息只能被一个消费者消费,适合对于任务过重或任务较多的情况,使用工作队列可以提高任务的处理速度

1.生产者

package com.ghx.work;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;/*** @author :guo* @date :Created in 2025/3/20 14:51* @description:* @version:*/
public class Test03 {private static final String QUEUE_NAME="queue01";public static void main(String[] args) {ConnectionFactory factory=new ConnectionFactory();factory.setHost("xxxx");factory.setPort(5672);factory.setUsername("guest");factory.setPassword("guest");factory.setVirtualHost("/");try {Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.queueDeclare(QUEUE_NAME,true,false,false,null);for (int i = 0; i < 10; i++){String msg="你好  世界"+i;channel.basicPublish("",QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN,msg.getBytes("utf-8"));}channel.close();connection.close();}catch (Exception e){}}
}

2.  2个消费者

package com.ghx.work;import com.rabbitmq.client.*;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** @author :guo* @date :Created in 2025/3/20 15:00* @description:* @version:*/
public class Test03 {private static final String QUEUE_NAME="queue01";public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory factory=new ConnectionFactory();factory.setHost("xxxX");factory.setPort(5672);factory.setUsername("guest");factory.setPassword("guest");factory.setVirtualHost("/");Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.queueDeclare(QUEUE_NAME,true,false,false,null);channel.basicQos(1);Consumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("消费者1收到消息"+new String(body));}};//接收消息channel.basicConsume(QUEUE_NAME,true,consumer);}}
package com.ghx.work;import com.rabbitmq.client.*;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** @author :guo* @date :Created in 2025/3/20 15:00* @description:* @version:*/
public class Consumer02 {private static final String QUEUE_NAME="queue01";public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory factory=new ConnectionFactory();factory.setHost("xxxx");factory.setPort(5672);factory.setUsername("guest");factory.setPassword("guest");factory.setVirtualHost("/");Connection connection = factory.newConnection();Channel channel = connection.createChannel();channel.queueDeclare(QUEUE_NAME,true,false,false,null);channel.basicQos(1);Consumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("消费者2收到消息"+new String(body));}};//接收消息channel.basicConsume(QUEUE_NAME,true,consumer);}}

2.3发布订阅模式 publish/subscribe

x  : 交换机

        一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有常见以下3种类型:

  1. Fanout:广播,将消息交给所有绑定到交换机的队列

  2. Direct:定向,把消息交给符合指定routing key 的队列

  3. Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列

每个消费者都有自己独立的队列

2.3.1生产者

package com.ghx.work;import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** @author :guo* @date :Created in 2025/3/20 11:35* @description:* @version:*/
public class Test01 {public static void main(String[] args) throws IOException, TimeoutException {//创建连接工厂ConnectionFactory factory=new ConnectionFactory();//rabbitmq服务器地址 默认本地localhostfactory.setHost("xxxx");//端口号 默认5672factory.setPort(5672);//用户名 密码  默认guestfactory.setUsername("guest");factory.setPassword("guest");factory.setVirtualHost("/");//创建连接对象Connection connection=factory.newConnection();//获取channel对象Channel channel = connection.createChannel();//创建交换机
//        String exchange,交换机的名称
//        BuiltinExchangeType type, 交换机的类型
//        boolean durable: 是否持久化channel.exchangeDeclare("fanout_exchange", BuiltinExchangeType.FANOUT,true);//创建队列channel.queueDeclare("fanout_queue1",true,false,false,null);channel.queueDeclare("fanout_queue2",true,false,false,null);//绑定队列和交换机
//        String queue,队列名
//        String exchange,交换机名
//        String routingKey: 路由key 因为广播模式没有路由key  ""channel.queueBind("fanout_queue1","fanout_exchange","");channel.queueBind("fanout_queue2","fanout_exchange","");//发送消息String msg="hello fanout交换机";channel.basicPublish("fanout_exchange","",null,msg.getBytes());channel.close();connection.close();}
}

2.4路由模式routing

  • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个 RoutingKey(路由key)

  • 消息的发送方在向 Exchange 发送消息时,也必须指定消息的 RoutingKey

  • Exchange 不再把消息交给每一个绑定的队列,而是根据消息的 Routing Key 进行判断,只有队列的Routingkey 与消息的 Routing key 完全一致,才会接收到消息

package com.ghx.router;import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** @author :guo* @date :Created in 2025/3/20 11:35* @description:* @version:*/
public class Test01 {public static void main(String[] args) throws IOException, TimeoutException {//创建连接工厂ConnectionFactory factory=new ConnectionFactory();//rabbitmq服务器地址 默认本地localhostfactory.setHost("xxxx");//端口号 默认5672factory.setPort(5672);//用户名 密码  默认guestfactory.setUsername("guest");factory.setPassword("guest");factory.setVirtualHost("/");//创建连接对象Connection connection=factory.newConnection();//获取channel对象Channel channel = connection.createChannel();//创建交换机
//        String exchange,交换机的名称
//        BuiltinExchangeType type, 交换机的类型
//        boolean durable: 是否持久化channel.exchangeDeclare("direct_exchange", BuiltinExchangeType.DIRECT,true);//创建队列channel.queueDeclare("direct_queue1",true,false,false,null);channel.queueDeclare("direct_queue2",true,false,false,null);//绑定队列和交换机
//        String queue,队列名
//        String exchange,交换机名
//        String routingKey: 路由key 因为广播模式没有路由key  ""channel.queueBind("direct_queue1","direct_exchange","error");channel.queueBind("direct_queue2","direct_exchange","error");channel.queueBind("direct_queue2","direct_exchange","info");channel.queueBind("direct_queue2","direct_exchange","warning");//发送消息String msg="hello direct交换机";channel.basicPublish("direct_exchange","info",null,msg.getBytes());channel.close();connection.close();}
}

2.5主题模式topics

  • Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列。只不过 Topic 类型Exchange 可以让队列在绑定 Routing key 的时候使用==通配符==!

  • Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert

  • 通配符规则:# 匹配一个或多个词,* 匹配不多不少恰好1个词,例如:item.# 能够匹配 item.insert.abc 或者 item.insert,item.* 只能匹配 item.insert

下面的只会发送给2

package com.ghx.topic;import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** @author :guo* @date :Created in 2025/3/20 11:35* @description:* @version:*/
public class Test01 {public static void main(String[] args) throws IOException, TimeoutException {//创建连接工厂ConnectionFactory factory=new ConnectionFactory();//rabbitmq服务器地址 默认本地localhostfactory.setHost("121.196.229.251");//端口号 默认5672factory.setPort(5672);//用户名 密码  默认guestfactory.setUsername("guest");factory.setPassword("guest");factory.setVirtualHost("/");//创建连接对象Connection connection=factory.newConnection();//获取channel对象Channel channel = connection.createChannel();//创建交换机
//        String exchange,交换机的名称
//        BuiltinExchangeType type, 交换机的类型
//        boolean durable: 是否持久化channel.exchangeDeclare("topic_exchange", BuiltinExchangeType.TOPIC,true);//创建队列channel.queueDeclare("topic_queue1",true,false,false,null);channel.queueDeclare("topic_queue2",true,false,false,null);//绑定队列和交换机
//        String queue,队列名
//        String exchange,交换机名
//        String routingKey: 路由key 因为广播模式没有路由key  ""channel.queueBind("topic_queue1","topic_exchange","*.orange.*");channel.queueBind("topic_queue2","topic_exchange","*.*.rabbit");channel.queueBind("topic_queue2","topic_exchange","lazy.#");//发送消息String msg="hello topic交换机";channel.basicPublish("topic_exchange","lazy.orange",null,msg.getBytes());channel.close();connection.close();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各类神经网络学习:(四)RNN 循环神经网络(下集),pytorch 版的 RNN 代码编写

上一篇下一篇RNN&#xff08;中集&#xff09;待编写 代码详解 pytorch 官网主要有两个可调用的模块&#xff0c;分别是 nn.RNNCell 和 nn.RNN &#xff0c;下面会进行详细讲解。 RNN 的同步多对多、多对一、一对多等等结构都是由这两个模块实现的&#xff0c;只需要将对输入…

深度学习篇---深度学习中的范数

文章目录 前言一、向量范数1.L0范数1.1定义1.2计算式1.3特点1.4应用场景1.4.1特征选择1.4.2压缩感知 2.L1范数&#xff08;曼哈顿范数&#xff09;2.1定义2.2计算式2.3特点2.4应用场景2.4.1L1正则化2.4.2鲁棒回归 3.L2范数&#xff08;欧几里得范数&#xff09;3.1定义3.2特点3…

星越L_灯光操作使用讲解

目录 1.开启前照灯 2左右转向灯、远近灯 3.auto自动灯光 4.自适应远近灯光 5.后雾灯 6.调节大灯高度 1.开启前照灯 2左右转向灯、远近灯 3.auto自动灯光 系统根据光线自动开启灯光

Stable Diffusion lora训练(一)

一、不同维度的LoRA训练步数建议 2D风格训练 数据规模&#xff1a;建议20-50张高质量图片&#xff08;分辨率≥10241024&#xff09;&#xff0c;覆盖多角度、多表情的平面风格。步数范围&#xff1a;总步数控制在1000-2000步&#xff0c;公式为 总步数 Repeat Image Epoch …

【一维前缀和与二维前缀和(简单版dp)】

1.前缀和模板 一维前缀和模板 1.暴力解法 要求哪段区间&#xff0c;我就直接遍历那段区间求和。 时间复杂度O(n*q) 2.前缀和 ------ 快速求出数组中某一个连续区间的和。 1&#xff09;预处理一个前缀和数组 这个前缀和数组设定为dp&#xff0c;dp[i]表示&#xff1a;表示…

植物来源药用天然产物的合成生物学研究进展-文献精读121

植物来源药用天然产物的合成生物学研究进展 摘要 大多数药用天然产物在植物中含量低微&#xff0c;提取分离困难&#xff1b;而且这些化合物一般结构复杂&#xff0c;化学合成难度大&#xff0c;还容易造成环境污染。基于合成生物学技术获得药用天然产物具有绿色环保和可持续发…

JavaScript |(五)DOM简介 | 尚硅谷JavaScript基础实战

学习来源&#xff1a;尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 笔记来源&#xff1a;在这位大佬的基础上添加了一些东西&#xff0c;欢迎大家支持原创&#xff0c;大佬太棒了&#xff1a;JavaScript |&#xff08;五&#xff09;DOM简介 | 尚硅谷JavaScript基础…

The Illustrated Stable Diffusion

The Illustrated Stable Diffusion 1. The components of Stable Diffusion1.1. Image information creator1.2. Image Decoder 2. What is Diffusion anyway?2.1. How does Diffusion work?2.2. Painting images by removing noise 3. Speed Boost: Diffusion on compressed…

yarn 装包时 package里包含sqlite3@5.0.2报错

yarn 装包时 package里包含sqlite35.0.2报错 解决方案&#xff1a; 第一步&#xff1a; 删除package.json里的sqlite35.0.2 第二步&#xff1a; 装包&#xff0c;或者增加其他的npm包 第三步&#xff1a; 在package.json里增加sqlite35.0.2&#xff0c;并运行yarn装包 此…

buu-bjdctf_2020_babystack2-好久不见51

整数溢出漏洞 将nbytes设置为-1就会回绕&#xff0c;变成超大整数 从而实现栈溢出漏洞 环境有问题 from pwn import *# 连接到远程服务器 p remote("node5.buuoj.cn", 28526)# 定义后门地址 backdoor 0x400726# 发送初始输入 p.sendlineafter(b"your name…

DHCP 配置

​ 最近发现&#xff0c;自己使用虚拟机建立的集群&#xff0c;在断电关机或者关机一段时间后&#xff0c;集群之间的链接散了&#xff0c;并且节点自身的 IP 也发生了变化&#xff0c;发现是 DHCP 的问题&#xff0c;这里记录一下。 DHCP ​ DHCP&#xff08;Dynamic Host C…

股指期货合约的命名规则是怎样的?

股指期货合约的命名规则其实很简单&#xff0c;主要由两部分组成&#xff1a;合约代码和到期月份。 股指期货合约4个字母数字背后的秘密 股指期货合约一般来说都是由字母和数字来组合的&#xff0c;包含了品种代码和到期的时间&#xff0c;下面我们具体来看看。 咱们以“IF23…

OSPF 协议详解:从概念原理到配置实践的全网互通实现

什么是OSPF OSPF&#xff08;开放最短路径优先&#xff09;是由IETF开发的基于链路状态的自治系统内部路由协议&#xff0c;用来代替存在一些问题的RIP协议。与距离矢量协议不同&#xff0c;链路状态路由协议关心网络中链路活接口的状态&#xff08;包括UP、DOWN、IP地址、掩码…

蓝桥杯 之 数论

文章目录 习题质数找素数 数论&#xff0c;就是一些数学问题&#xff0c;蓝桥杯十分喜欢考察&#xff0c;常见的数论的问题有&#xff1a;取模&#xff0c;同余&#xff0c;大整数分解&#xff0c;素数&#xff0c;质因数&#xff0c;最大公约数&#xff0c;最小公倍数等等 素…

Beans模块之工厂模块注解模块@Qualifier

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

C# HTTP 文件上传、下载服务器

程序需要管理员权限&#xff0c;vs需要管理员打开 首次运行需要执行以下命令注册URL&#xff08;管理员命令行&#xff09; netsh advfirewall firewall add rule name"FileShare" dirin actionallow protocolTCP localport8000 ipconfig | findstr "IPv4&quo…

FPGA中串行执行方式之计数器控制

FPGA中串行执行方式之计数器控制 使用计数器控制的方式实现状态机是一种简单且直观的方法。它通过计数器的值来控制状态的变化,从而实现顺序逻辑。计数器的方式特别适合状态较少且状态转移是固定的场景。 基本原理 计数器控制的状态机 ​例程1:简单的顺序状态机 以下是一个…

纯vue手写流程组件

前言 网上有很多的vue的流程组件&#xff0c;但是本人不喜欢很多冗余的代码&#xff0c;喜欢动手敲代码&#xff1b;刚开始写的时候&#xff0c;确实没法下笔&#xff0c;最后一层一层剥离&#xff0c;总算实现了&#xff1b;大家可以参考我写的代码&#xff0c;可以拿过去定制…

数字化转型驱动卫生用品安全革新

当315晚会上晃动的暗访镜头揭露卫生巾生产车间里漂浮的异物、纸尿裤原料仓中霉变的碎屑时&#xff0c;这一触目惊心的场景无情地撕开了“贴身安全”的遮羞布&#xff0c;暴露的不仅是部分企业的道德缺失&#xff0c;更凸显了当前检测与监管体系的漏洞&#xff0c;为整个行业敲响…

【JavaWeb学习Day27】

Tlias前端 员工管理 条件分页查询&#xff1a; 页面布局 搜索栏&#xff1a; <!-- 搜索栏 --><div class"container"><el-form :inline"true" :model"searchEmp" class"demo-form-inline"><el-form-item label…