RabbitMQ安装及使用原理介绍
前言
本篇文章会通过如何在linux上安装一个rabbitMQ,以及基本使用命令 ,常见配置,如何java客户端使用RabbitMQ;会对比activeMQ有一些不同,以及常见使用原理的实现。
RabbitMQ简介
特性
包括异步消息传递、开发人员体验、分布式部署、企业 + 云就绪、工具和插件、管理和监控
包括客户端 服务端的文档,
安装
安装到Centos 7,或者其他linux 官方文档都有对应的版本 可供我们选择
Downloading and Installing RabbitMQ — RabbitMQ
注意事项
- erlang的版本一定要与RabbitMQ版本匹配
- root身份(或sudo)安装
- 一定要能访问外网
- 安装必需的依赖库 EPEL
yum install epel-release
- 安装Erlang Solutions repository
wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
- 安装 erlang
yum -y install erlang
- 安装依赖包 socat
yum -y install socat
- RPM方式安装RabbitMQ
rpm -Uvh https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.9/rabbitmq- server-3.7.9-1.el7.noarch.rpm
- 运行rabbitmq-server 服务
systemctl enable rabbitmq-server
systemctl start rabbitmq-server
systemctl stop rabbitmq-server
- 安装后RabbitMQ程序、配置文件、日志、数据目录位置说明
less /var/log/rabbitmq/rabbit@localhost.log
基本配置
RabbitMQ有一套默认的配置,能够满足日常开发需求,如果需要修改,需要自己建立个配置文件
也就是说rabbitmq是不需要我们修改配置的。
一些常使用命令
- 查看rabbitmq状态 systemctl status rabbitmq
- whereis rabbitmq 查看rabbitmq的目录
包括一些存放日志的地方
- 通过less rabbit@localhost.log 可以查询日志的目录等等
Rabbit端口
rabbitMQ会绑定一些端口,安装完后,需要将这些端口添加至防火墙。
15674端口:基于websocket的stomp客户端端口 当插件web stomp启用的时候打开
15675端口:基于websocket的mqtt客户端 端口 当web mqtt打开的时候
在bin中能看到下面的命令
rabbitmqctl(8) — RabbitMQ
文档上面包括所有命令
RabbitMQ管理控制台
在rabbitmq中有管理插件,需要手动激活
rabbitmq-plugins enable rabbitmq_management
#添加用户
rabbitmqctl add_user admin admin
#为用户分配管理权限
rabbitmqctl set_user_tags admin administrator
#为用户分配资源权限
https://www.rabbitmq.com/rabbitmqctl.8.html#set_permissions rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
RabbitMQ 的用户角色分类
- 列出自己可以通过AMQP登入的virtual hosts
- 查看自己的virtual hosts中的queues, exchanges 和 bindings
- 查看和关闭自己的channels 和 connections
- 查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。
policymaker
- 查看、创建和删除自己的virtual hosts所属的policies和parameters
- 列出所有virtual hosts,包括他们不能登录的virtual hosts
- 查看其他用户的connections和channels
- 查看节点级别的数据如clustering和memory使用情况
- 查看真正的关于所有virtual hosts的全局的统计信息
- 创建和删除virtual hosts
- 查看、创建和删除users
- 查看创建和删除permissions
- 关闭其他用户的connections
访问web管理控制台
http://ip:15672
登录进去包括端口等等,连接 节点名称。 开的通道以及 通道的各种情况
虚拟主机
客户端使用
RabbitMQ Tutorials — RabbitMQ
提供给例子进行使用和操作
客户端依赖
<dependency><groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId><version>5.7.3</version>
</dependency>
使用场景用队列进行交互
利用队列进行交互
这里创建一个 生产者、以及消费者 直接利用ConnectionFactory ,并创建Channel 通道
- 创建连接工厂
- 设置连接属性
- 从连接工厂获取连接
- 从链接中创建通道
- 声明(创建)队列 如果队列不存在,才会创建 RabbitMQ 不允许声明两个队列名相同,属性不同的队列,否则会报错
- 发送消息
public class Producer {public static void main(String[] args) throws Exception {// 1、创建连接工厂ConnectionFactory factory = new ConnectionFactory();// 2、设置连接属性factory.setHost("localhost");factory.setPort(5672);factory.setUsername("admin");factory.setPassword("admin");// factory.setVirtualHost(virtualHost);try (// 3、从连接工厂获取连接Connection connection = factory.newConnection("生产者");// 4、从链接中创建通道Channel channel = connection.createChannel();) {/*** 5、声明(创建)队列 如果队列不存在,才会创建 RabbitMQ 不允许声明两个队列名相同,属性不同的队列,否则会报错** queueDeclare参数说明:* * @param queue* 队列名称* @param durable* 队列是否持久化* @param exclusive* 是否排他,即是否为私有的,如果为true,会对当前队列加锁,其它通道不能访问,并且在连接关闭时会自动删除,不受持久化和自动删除的属性控制* @param autoDelete* 是否自动删除,当最后一个消费者断开连接之后是否自动删除* @param arguments* 队列参数,设置队列的有效期、消息最大长度、队列中所有消息的生命周期等等*/channel.queueDeclare("queue1", false, false, false, null);// 消息内容String message = "Hello World!";// 6、发送消息channel.basicPublish("", "queue1", null, message.getBytes());System.out.println("发送消息:" + message);}}
}
在消费者端
- 创建连接工厂
- 设置连接属性
- 从连接工厂获取连接
- 从链接中创建通道
- 声明(创建)队列 如果队列不存在,才会创建 RabbitMQ 不允许声明两个队列名相同,属性不同的队列,否则会报错
- 定义收到消息后的回调
- 开启队列消费
public class Consumer {public static void main(String[] args) throws Exception {// 1、创建连接工厂ConnectionFactory factory = new ConnectionFactory();// 2、设置连接属性factory.setHost("rabbitmq.study.com");factory.setUsername("admin");factory.setPassword("admin");String queueName = "queue1";try (// 3、从连接工厂获取连接Connection connection = factory.newConnection("消费者");// 4、从链接中创建通道Channel channel = connection.createChannel();) {/*** 5、声明(创建)队列 如果队列不存在,才会创建 RabbitMQ 不允许声明两个队列名相同,属性不同的队列,否则会报错** queueDeclare参数说明:* * @param queue* 队列名称* @param durable* 队列是否持久化* @param exclusive* 是否排他,即是否为私有的,如果为true,会对当前队列加锁,其它通道不能访问,* 并且在连接关闭时会自动删除,不受持久化和自动删除的属性控制。 一般在队列和交换器绑定时使用* @param autoDelete* 是否自动删除,当最后一个消费者断开连接之后是否自动删除* @param arguments* 队列参数,设置队列的有效期、消息最大长度、队列中所有消息的生命周期等等*/channel.queueDeclare(queueName, false, false, false, null);// 6、定义收到消息后的回调DeliverCallback callback = new DeliverCallback() {public void handle(String consumerTag, Delivery message) throws IOException {System.out.println("收到消息:" + new String(message.getBody(), "UTF-8"));}};// 7、开启队列消费channel.basicConsume(queueName, true, callback, new CancelCallback() {public void handle(String consumerTag) throws IOException {}});System.out.println("开始接收消息");System.in.read();}}
}
在运行过后 web管理台上就可以看到非持久化的消息
数据和activemq还是不一样,默认时持久化的,没有消费者时,这个队列的消息是会一直存在的。
工作队列
消费者有多个的情况 Work Queue 当队列中的消息处理比较耗时时,我们可以开启多个消息者来并行消费处理消息。
只要没有确认,消息是一直存在的。
这里在代码中使用是和上面的不一样的是 消息者
public static void main(String[] args) throws Exception {// 1、创建连接工厂ConnectionFactory factory = new ConnectionFactory();// 2、设置连接属性factory.setHost("localhost");factory.setUsername("admin");factory.setPassword("admin");String queueName = "queue1";try (// 3、从连接工厂获取连接Connection connection = factory.newConnection("消费者1");// 4、从链接中创建通道Channel channel = connection.createChannel();// 可以同一连接创建多个通道,也可是不同连接创建通道 来组成多个消费者// Connection connection2 = factory.newConnection("消费者2");// Channel channel2 = connection2.createChannel();Channel channel2 = connection.createChannel();) {// 5、声明(创建)队列 如果队列不存在,才会创建 RabbitMQ 不允许声明两个队列名相同,属性不同的队列,否则会报错channel.queueDeclare(queueName, false, false, false, null);// 在消费者处理一个消息比较耗时时,减少预发来防止消息得不到及时处理channel.basicQos(1); // accept only one unack-ed message at a time// 6、定义收到消息后的回调DeliverCallback callback = (consumerTag, message) -> {System.out.println(consumerTag + " 收到消息:" + new String(message.getBody(), "UTF-8"));};// 7、开启队列消费channel.basicConsume(queueName, true, callback, consumerTag -> {});// 第二个消费者channel2.basicQos(1); // 只预取一个消息channel2.basicConsume(queueName, true, callback, consumerTag -> {});System.out.println("开始接收消息");}}
可以创建几个通道取消息,默认是256的预取消息,这里随便设置得值为1.每个通道取一次
在spring中使用
只需要在application.yml中添加下面得配置
spring:rabbitmq:host: rabbitmq.study.comport: 5672username: adminpassword: admin # listener:# simple:# prefetch: 1
使用时添加对应得 RabbitListener 消费者
@RabbitListener(queues = "hello")public void receive(String in) {System.out.println(" [x] Received '" + in + "'");}
生产者
34. 消息传递 (spring.io)
- 这里配置一个我们要操作的Queue的bean,spring-rabbitmq框架在启动时将从容器中获取这些bean,
- 并向rabbitmq服务器创建这些queue、exchange、binding。
- 在RabbitAdmin.initialize()方法中做的这个事。
- 其完成的工作为:channel.queueDeclare("hello",false, false, false, null);
- 我们也可以自己手动通过 AmqpAdmin.declareXXX(xxx)方法来创建我们需要的queue、exchange、binding。
public class HelloWorldProducer {//spring boot 中 amqp的使用说明: //https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-messaging.html#boot-features-amqp/** 【注意】这里配置一个我们要操作的Queue的bean,spring-rabbitmq框架在启动时将从容器中获取这些bean,* 并向rabbitmq服务器创建这些queue、exchange、binding。* 在RabbitAdmin.initialize()方法中做的这个事。* 其完成的工作为:channel.queueDeclare("hello",false, false, false, null);* 我们也可以自己手动通过 AmqpAdmin.declareXXX(xxx)方法来创建我们需要的queue、exchange、binding。* * @Autowired private AmqpAdmin amqpAdmin;* * public void send() { * ... * this.amqpAdmin.declareQueue(new Queue("hello"));* ... * }*/@Beanpublic Queue hello() {return new Queue("hello");}// @Autowired // private AmqpAdmin amqpAdmin; //做queue、exchange、binding的管理用的@Autowiredprivate RabbitTemplate template;@Autowiredprivate Queue queue;@Scheduled(fixedDelay = 1000) //定时多次发送消息public void send() {String message = "Hello World!";this.template.convertAndSend(queue.getName(), message);System.out.println(" [x] Sent '" + message + "'");}public static void main(String[] args) throws Exception {SpringApplication.run(HelloWorldProducer.class, args);System.in.read();}
}
也是为我们简化了写代码
然后在spring中设置 预取数,或者配置中添加都可以
@Beanpublic SimpleRabbitListenerContainerFactory myFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,ConnectionFactory connectionFactory) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();configurer.configure(factory, connectionFactory);// factory.setMessageConverter(myMessageConverter());factory.setPrefetchCount(1);return factory;}
publish/subscribe
Exchange
- fanout:扇型交换机
- direct:直连交换机
- topic:主题交换机
- headers:头交换机
channel.basicPublish("", "hello", null, message.getBytes());
channel.exchangeDeclare(String exchange, String type)
channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
发送消息
channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8"));
当指定exchange 不指定routingkey
在消费者方
创建一个临时队列,名字自动生成(唯一),连接断开,自动删除;
将队列绑定到exchange,绑定时指定的routingKey 也称bingdingKey,在fanout交换器中routingKey无用。 这里主要做绑定队列和exchange建立关联关系
public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");factory.setPort(5672);factory.setUsername("admin");factory.setPassword("admin");try (Connection connection = factory.newConnection();Channel channel = connection.createChannel();Connection connection2 = factory.newConnection();Channel channel2 = connection2.createChannel();) {channel.exchangeDeclare(EXCHANGE_NAME, "fanout");// 创建一个临时队列,名字自动生成(唯一),连接断开,自动删除String queueName = channel.queueDeclare().getQueue();// 将队列绑定到exchange,绑定时指定的routingKey 也称// bingdingKey,在fanout交换器中routingKey无用。channel.queueBind(queueName, EXCHANGE_NAME, "");DeliverCallback deliverCallback = (consumerTag, message) -> {System.out.println(consumerTag + " 收到消息:" + new String(message.getBody(), "UTF-8"));};channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {});// 第二个消费者String queueName2 = channel2.queueDeclare().getQueue();channel2.queueBind(queueName2, EXCHANGE_NAME, "");channel2.basicConsume(queueName2, true, deliverCallback, consumerTag -> {});System.out.println("开始接收消息");System.in.read();}}
在spring中
@Configuration
public class PubSubConfiguration {@Beanpublic FanoutExchange fanout() {return new FanoutExchange("spring-logs");}@Configurationpublic static class ReceiverConfig {@Beanpublic Queue autoDeleteQueue1() {return new AnonymousQueue();}@Beanpublic Queue autoDeleteQueue2() {return new AnonymousQueue();}@Beanpublic Binding binding1(FanoutExchange fanout, Queue autoDeleteQueue1) {return BindingBuilder.bind(autoDeleteQueue1).to(fanout);}@Beanpublic Binding binding2(FanoutExchange fanout, Queue autoDeleteQueue2) {return BindingBuilder.bind(autoDeleteQueue2).to(fanout);}}
}
然后其他得是一样的。
routing
在消费者,拆分开不同的消息,利用routingkey发送到不同的队列 对应消费者
在消费者 这里 的区别在于利用 不同routingkey orange black green进行区分开 相当于分类
channel.exchangeDeclare(EXCHANGE_NAME, "direct");String queueName = channel.queueDeclare().getQueue();channel.queueBind(queueName, EXCHANGE_NAME, "orange");DeliverCallback deliverCallback = (consumerTag, message) -> {System.out.println(consumerTag + " 收到消息:" + new String(message.getBody(), "UTF-8"));};channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {});// 第二个消费者String queueName2 = channel2.queueDeclare().getQueue();channel2.queueBind(queueName2, EXCHANGE_NAME, "black");channel2.queueBind(queueName2, EXCHANGE_NAME, "green");channel2.basicConsume(queueName2, true, deliverCallback, consumerTag -> {});
在提供者这端只需要添加
channel.basicPublish(EXCHANGE_NAME, routingKey, null, message.getBytes("UTF-8"));
在spring中这个和之前的exchange很像
@Beanpublic Binding binding1a(DirectExchange direct, Queue autoDeleteQueue1) {return BindingBuilder.bind(autoDeleteQueue1).to(direct).with("orange");}@Beanpublic Binding binding1b(DirectExchange direct, Queue autoDeleteQueue1) {return BindingBuilder.bind(autoDeleteQueue1).to(direct).with("black");}
绑定时,添加 配置中
Topic
利用topic 模式交换 和之前不一样的是,这里采用模糊匹配的方式 ,将粒度更加扩大,多个维度
Binding 绑定
channel.queueBind(queueName, "logs", "");
channel.queueBind(String queue, String exchange, String routingKey)
RPC方式
远程过程调用的方式:客户端 和服务端调用者,远端服务器上的程序,进行返回数据
mq本身就是数据中转站,可以利用mq进行实现。
需要对应生成一个队列
public static void main(String[] argv) {try (RPCClient fibonacciRpc = new RPCClient()) {for (int i = 0; i < 32; i++) {String i_str = Integer.toString(i);System.out.println(" [x] Requesting fib(" + i_str + ")");String response = fibonacciRpc.call(i_str);System.out.println(" [.] Got '" + response + "'");}} catch (IOException | TimeoutException | InterruptedException e) {e.printStackTrace();}}public String call(String message) throws IOException, InterruptedException {final String corrId = UUID.randomUUID().toString();String replyQueueName = channel.queueDeclare().getQueue();AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().correlationId(corrId).replyTo(replyQueueName).build();channel.basicPublish("", requestQueueName, props, message.getBytes("UTF-8"));final BlockingQueue<String> response = new ArrayBlockingQueue<>(1);String ctag = channel.basicConsume(replyQueueName, true, (consumerTag, delivery) -> {if (delivery.getProperties().getCorrelationId().equals(corrId)) {response.offer(new String(delivery.getBody(), "UTF-8"));}}, consumerTag -> {});String result = response.take();channel.basicCancel(ctag);return result;}public void close() throws IOException {connection.close();}
通过队列调用 ,生成数据,消息发布者。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Nginx配置中一个不起眼字符“/“的巨大作用,失之毫厘谬以千里
序 Nginx作为一个轻量级的,高性能的web服务软件,因其占有内存少,并发能力强的特点,而广受欢迎和使用。国内很多大型互联网公司也对Nginx很是青睐。像BAT(百度,阿里和腾讯),TMD(头条…...
2024/4/30 4:17:24 - 受猪周期跌价影响 天康生物Q3净利亏损4.34亿
■文 | 尚义 近期,生猪价格持续走低以及饲料价格上升,成为生猪行业出现大幅亏损的主要原因。根据农业农村部披露的信息,全国能繁母猪存量数据下降缓慢,整个生猪养殖行业去产能已悄然开始,但幅度十分有限。 伴随着上市…...
2024/4/30 16:28:19 - shiro-SimpleHash加密工具类V1.0
引入 shiro 依赖 <!--shiro--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.4.0</version></dependency> 加密工具类的(简单)使用 publi…...
2024/4/21 17:17:45 - webpack-bundle-analyzer安装后端口被占问题解决
(如图所示) 点击windowsR 输入 netstat -nao |findstr 8888 查看端口8888是否被占 接着输入 taskkill/pid 16060 /F...
2024/5/1 12:20:19 - LeetCode 496.下一个更大元素|【Java】
目录一、题目二、解题思路三、Java代码一、题目 给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。 请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。 nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一…...
2024/4/28 21:46:53 - SCAU java实验6:发牌程序
实验6:发牌程序 题目类别: 实验 关键字: 掌握Java数组、方法的基本定义 内容要求: 编写程序,项目名和类名均为PokerGame。实现功能: (1) 共有m幅扑克牌,每幅扑克牌不包括大王和小王共52张牌。 (2) 可能有n个人参与扑克游戏&…...
2024/4/29 12:10:04 - 【优化算法】人工蜂鸟优化算法(AHA)【含Matlab源码 1470期】
一、获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。 获取代码方式2: 通过紫极神光博客主页开通CSDN会员,凭支付凭证,私信博主,可获得此代码。 获取代码方式3: 完整代码已上传我的资源:【优化算法】人工蜂鸟优化算…...
2024/5/1 15:08:20 - 数字电路-非门应用
目录:一、概述二、放大电路1、4069线性放大原理2、声音灯光显示实验过程3、Proteus仿真三、振荡电路四、正弦波转方波1、工作原理2、Proteus仿真---------------------------------------------------------------------------------------------------------------…...
2024/4/27 23:08:53 - 力扣:1154. 一年中的第几天
1154. 一年中的第几天 - 力扣(LeetCode) (leetcode-cn.com) 1、可以参考 (20条消息) 力扣:1360. 日期之间隔几天_山~海的博客-CSDN博客 类似那道题,只是把起始日期设为同年的1月1日 最后别忘了1,因为它…...
2024/5/1 3:02:04 - 每日cf计划
为了督促自己认真训练,防止摸鱼,决定每天至少做一题,且写一题题解,链接大概会放在这篇文章下面,希望大家能督促我?...
2024/4/30 10:54:47 - 剑指offer JZ77 之字形打印二叉树
这里写目录标题JZ77 之字形打印二叉树1.题目描述2.解题思路3.代码实现JZ77 之字形打印二叉树 1.题目描述 2.解题思路 拿到这个题目,首先就发现这个题目和二叉树层序遍历非常像,但是存在区别,二叉树层序遍历是按照“从上到下,从左…...
2024/4/28 8:24:37 - python/educoder第4关:综合运用
#综合运用 #任务1 在begin和end间空白处填写代码 #begin ss1input() alist(ss1) print(a) btuple(ss1) print(b) #end#任务2 在begin和end间空白处填写代码 #begin a2ss1.split( ) ss2list(a2) print(ss2) #end#任务3 在begin和end间空白处填写代码 #begin ss3ss2*3 print(-.jo…...
2024/4/29 2:48:03 - 数据结构习题集1:顺序表的实现及应用
文章目录实验目的与实验要求实验任务习题集1:顺序表的实现及应用1、修改错误1、第一处错误2、第二处错误3、第三处错误2、合并表思路 函数实现3、代码实现(未进行格式优化)4、实现效果(list1、list2各删除一个数字)实…...
2024/4/21 22:58:38 - Day_01 java概述
一.java概述 1.什么是java Java是由sun公司开发的一门面向对象编程语言,吸收了C语言的各种优点,为了安全考虑摒弃了C多继承、指针等概念,采用了引用,Java语言具有功能强大和简单易用两个特征,具有一次编译多次运行的特…...
2024/5/1 12:19:39 - 解决SpringMVC中静态资源路径403问题
方法一 web.xml里添加如下的配置 <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> &…...
2024/5/1 8:27:36 - vue中App.vue的主要作用
app.vue中不但可以当做是网站首页,也可以写所有页面中公共需要的动画或者样式。不在上面写代码也可以。 app.vue是主组件,是页面入口文件,是vue页面资源的首加载项。所有的页面都是在app.vue中进行切换的。可以理解为所有的路由都是app.vue的…...
2024/4/20 14:01:13 - 【优化算法】儿童绘画发展优化算法(CDDO)【含Matlab源码 1469期】
一、获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。 获取代码方式2: 通过紫极神光博客主页开通CSDN会员,凭支付凭证,私信博主,可获得此代码。 获取代码方式3: 完整代码已上传我的资源:【优化算法】儿童绘画发展优…...
2024/4/21 17:17:44 - 打造链上Bloomberg
2021年,Footprint 率先推出了首款全景式链上数据服务以及可视化自助分析工具。Footprint旨在打造专业的区块链数据分析平台——链上Bloomberg ,目标是做一家全球区块链媒体、金融数据和分析集团。 在传统金融市场上,Bloomberg是全球最大的金融…...
2024/4/27 20:42:17 - 【LeetCode】1323. 6 和 9 组成的最大数字(C++)
1323. 6 和 9 组成的最大数字1 题目描述2 示例描述2.1 示例12.2 示例22.3 示例33 解题提示4 解题思路5 代码详解1 题目描述 给你一个仅由数字 6 和 9 组成的正整数 num。 你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。 请返回你可以得到的最大…...
2024/5/1 14:58:48 - CCF-CSP-201812-2-小明放学(C++100分/含详细注释)
代码如下: #include <iostream>using namespace std;int main() { //灯顺序为 红、绿、黄 循环int red,yellow,green;//红、黄、绿灯的额定时间int n;//经过道路/红绿灯总数long long SumTime0;//小学上学所用时间cin>>red>>yellow>>gree…...
2024/4/20 17:32:30
最新文章
- 通过Servlet和JSP,结合session和application实现简单网络聊天室(文末附源码)
目录 一.成品效果 二.代码部分 chat.jsp ChatServlet 一.成品效果 在启动成功后,我们就可以在任意俩个浏览器页面中相互发消息,如图所示左边屏幕使用的是Edge浏览器,右图使用的是火狐浏览器。当然笔者这里只是简单实现最基本的一些功能&…...
2024/5/1 22:22:13 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 【Godot4自学手册】第三十五节摇杆控制开门
本节主要实现,在地宫墙壁上安装一扇门,在核实安装一个开门的摇杆,攻击摇杆,打开这扇门,但是只能攻击一次,效果如下: 一、添加完善节点 切换到underground场景,先将TileMap修改一下…...
2024/5/1 13:37:32 - 职场口才提升之道
职场口才提升之道 在职场中,口才的重要性不言而喻。无论是与同事沟通协作,还是向上级汇报工作,亦或是与客户洽谈业务,都需要具备良好的口才能力。一个出色的职场人,除了拥有扎实的专业技能外,还应具备出色…...
2024/5/1 2:36:04 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/30 18:14:14 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/30 18:21:48 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/30 9:43:22 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57