RabbitMQ快速上手以及RabbitMQ交换机的四种模式

news2024/12/23 12:37:54

Win10安装:

​win10下安装 RabbitMQ​_柚几哥哥的博客-CSDN博客

Linux安装:

Linux下载安装 RabbitMQ​_柚几哥哥的博客-CSDN博客

一、基础使用

1、导入依赖

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

        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>

2、配置application.yml

spring:
  #RabbitMQ
 rabbitmq:
    #服务器地址
   host: 192.168.10.100
    #用户名
   username: guest
    #密码
   password: guest
    #虚拟主机
   virtual-host: /
    #端口
   port: 5672
   listener:
     simple:
        #消费者最小数量
       concurrency: 10
        #消费者最大数量
       max-concurrency: 10
        #限制消费者每次只处理一条消息,处理完再继续下一条消息
       prefetch: 1
        #启动时是否默认启动容器,默认true
       auto-startup: true
        #被拒绝时重新进入队列
       default-requeue-rejected: true
   template:
     retry:
        #发布重试,默认false
       enabled: true
        #重试时间 默认1000ms
       initial-interval: 1000
        #重试最大次数,默认3次
       max-attempts: 3
        #重试最大间隔时间,默认10000ms
       max-interval: 10000
        #重试间隔的乘数。比如配2.0 第一次等10s,第二次等20s,第三次等40s
       multiplier: 1.0

3、编写配置类RabbitMQConfig.java

package com.xxxx.seckill.config;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author zhoubin
* @since 1.0.0
*/
@Configuration
public class RabbitMQConfig {
   @Bean
   public Queue queue(){
      return new Queue("queue",true);
   }
}

4、编写发送者MQSender.java

package com.xxxx.seckill.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author zhoubin
* @since 1.0.0
*/
@Service
@Slf4j
public class MQSender {
   @Autowired
   private RabbitTemplate rabbitTemplate;
   public void send(Object msg) {
      log.info("发送消息:"+msg);
      rabbitTemplate.convertAndSend("queue", msg);
   }
}

5、编写接收者MQReceiver.java

/**
 * @author zyw
 * @since 1.0.0
 */
@Service
@Slf4j
public class MQReceiver {


    @RabbitListener(queues = "queue")
     public void receive(Object msg) {
     log.info("接受消息:" + msg);
    }
}

6、编写测试接口UserController.java

/**
* 测试发送RabbitMQ消息
*/
@RequestMapping("/mq")
@ResponseBody
public void mq() {
   mqSender.send("Hello");
}

7、结果

 二、RabbitMQ交换机

Fanout模式

不处理路由键,只需要简单的将队里绑定到交换机上
发送到交换机的消息都会被转发到与该交换机绑定的所有队列上
Fanout 交换机转发消息是最快的

1、RabbitMQConfig.java

package com.xxxx.seckill.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author zhoubin
* @since 1.0.0
*/
@Configuration
public class RabbitMQConfig {
   private static final String QUEUE01 = "queue_fanout01";
   private static final String QUEUE02 = "queue_fanout02";
   private static final String EXCHANGE = "fanoutExchange";
   @Bean
   public Queue queue01(){
      return new Queue(QUEUE01);
   }
   @Bean
   public Queue queue02(){
      return new Queue(QUEUE02);
   }
   @Bean
   public FanoutExchange fanoutExchange(){
      return new FanoutExchange(EXCHANGE);
   }
   @Bean
   public Binding binding01(){
      return BindingBuilder.bind(queue01()).to(fanoutExchange());
   }
   @Bean
   public Binding binding02(){
      return BindingBuilder.bind(queue02()).to(fanoutExchange());
   }
}

2、MQSender.java

package com.xxxx.seckill.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author zhoubin
* @since 1.0.0
*/
@Service
@Slf4j
public class MQSender {
   @Autowired
   private RabbitTemplate rabbitTemplate;
   public void send(Object msg) {
      log.info("发送消息:"+msg);
      rabbitTemplate.convertAndSend("fanoutExchange","",msg);
   }
}

3、MQReceiver.java

package com.xxxx.seckill.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
/**
* @author zhoubin
* @since 1.0.0
*/
@Service
@Slf4j
public class MQReceiver {
   @RabbitListener(queues = "queue_fanout01")
   public void receive01(Object msg) {
      log.info("QUEUE01接受消息:" + msg);
   }
   @RabbitListener(queues = "queue_fanout02")
   public void receive02(Object msg) {
      log.info("QUEUE02接受消息:" + msg);
   }
}

4、UserController.java

/**
* 测试发送RabbitMQ消息
*/
@RequestMapping("/mq/fanout")
@ResponseBody
public void mq() {
   mqSender.send("Hello");
}

5、测试

调用 mq/direct01 接口,消息经由交换机转发到绑定该交换机的所有队列

Direct模式

所有发送到 Direct Exchange 的消息被转发到 RouteKey 中指定的 Queue
注意: Direct 模式可以使用 RabbitMQ 自带的 Exchange default Exchange, 所以不需要将
Exchange 进行任何绑定 (binding) 操作,消息传递时, RouteKey 必须完全匹配才会被队列接收,否
则该消息会被抛弃。
重点: routing key 与队列 queues key 保持一致,即可以路由到对应的 queue 中。

1、RabbitMQConfig.java

package com.xxxx.seckill.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author zhoubin
* @since 1.0.0
*/
@Configuration
public class RabbitMQConfig {
 private static final String QUEUE01 = "queue_direct01";
 private static final String QUEUE02 = "queue_direct02";
 private static final String EXCHANGE = "directExchange";
 private static final String ROUTINGKEY01 = "queue.red";
 private static final String ROUTINGKEY02 = "queue.green";
 @Bean
 public Queue queue01(){
 return new Queue(QUEUE01);
 }
 @Bean
 public Queue queue02(){
 return new Queue(QUEUE02);
 }
 @Bean
 public DirectExchange directExchange(){
 return new DirectExchange(EXCHANGE);
 }
 @Bean
 public Binding binding01(){
 return
BindingBuilder.bind(queue01()).to(directExchange()).with(ROUTINGKEY01);
 }
 @Bean
 public Binding binding02(){
 return
BindingBuilder.bind(queue02()).to(directExchange()).with(ROUTINGKEY02);
 }
}

2、MQSender.java

package com.xxxx.seckill.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author zhoubin
* @since 1.0.0
*/
@Service
@Slf4j
public class MQSender {
 @Autowired
 private RabbitTemplate rabbitTemplate;
 public void send01(Object msg) {
 log.info("发送red消息:"+msg);
 rabbitTemplate.convertAndSend("directExchange","queue.red",msg);
 }
 public void send02(Object msg) {
 log.info("发送green消息:"+msg);
 rabbitTemplate.convertAndSend("directExchange","queue.green",msg);
 }
}

3、MQReceiver.java

package com.xxxx.seckill.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
/**
* @author zhoubin
* @since 1.0.0
*/
@Service
@Slf4j
public class MQReceiver {
 @RabbitListener(queues = "queue_direct01")
 public void receive01(Object msg) {
 log.info("QUEUE01接受消息:" + msg);
 }
 @RabbitListener(queues = "queue_direct02")
 public void receive02(Object msg) {
 log.info("QUEUE02接受消息:" + msg);
 }
}

4、UserController.java

/**
* 测试发送RabbitMQ消息
*/
@RequestMapping("/mq/direct01")
@ResponseBody
public void mq01() {
   mqSender.send01("Hello,Red");
}
/**
* 测试发送RabbitMQ消息
*/
@RequestMapping("/mq/direct02")
@ResponseBody
public void mq02() {
   mqSender.send02("Hello,Green");
}

5、测试

调用 mq/direct01 接口,消息经由交换机绑定的 queue.red RoutingKey 转发到 queue_direct01

调用 mq/direct02 接口,消息经由交换机绑定的 queue.green RoutingKey 转发到 queue_direct02
队列

Topic模式

所有发送到 Topic Exchange 的消息被转发到所有管线 RouteKey 中指定 Topic Queue
Exchange RouteKey 和某 Topic 进行模糊匹配 , 此时队列需要绑定一个 Topic
对于 routing key 匹配模式定义规则举例如下 :
routing key 为一个句点号 . 分隔的字符串(我们将被句点号 . 分隔开的每一段独立的字符串称为
一个单词),如 “stock.usd.nyse” “nyse.vmw” “quick.orange.rabbit”
routing key 中可以存在两种特殊字符 * # ,用于做模糊匹配,其中 * 用于匹配一个单词, #
于匹配多个单词(可以是零个)

1、RabbitMQConfig.java

package com.xxxx.seckill.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author zhoubin
* @since 1.0.0
*/
@Configuration
public class RabbitMQConfig {
 private static final String QUEUE01 = "queue_topic01";
 private static final String QUEUE02 = "queue_topic02";
 private static final String EXCHANGE = "topicExchange";
 private static final String ROUTINGKEY01 = "#.queue.#";
 private static final String ROUTINGKEY02 = "*.queue.#";
 @Bean
 public Queue queue01(){
 return new Queue(QUEUE01);
 }
 @Bean
 public Queue queue02(){
 return new Queue(QUEUE02);
 }
 @Bean
 public TopicExchange topicExchange(){
 return new TopicExchange(EXCHANGE);
 }
 @Bean
 public Binding binding01(){
 return
BindingBuilder.bind(queue01()).to(topicExchange()).with(ROUTINGKEY01);
 }
 @Bean
 public Binding binding02(){
 return
BindingBuilder.bind(queue02()).to(topicExchange()).with(ROUTINGKEY02);
 }
}

2、MQSender.java

package com.xxxx.seckill.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author zhoubin
* @since 1.0.0
*/
@Service
@Slf4j
public class MQSender {
 @Autowired
 private RabbitTemplate rabbitTemplate;
 public void send01(Object msg) {
 log.info("发送消息(被01队列接受):"+msg);
 rabbitTemplate.convertAndSend("topicExchange","queue.red.message",msg);
 }
 public void send02(Object msg) {
 log.info("发送消息(被两个queue接受):"+msg);
 
rabbitTemplate.convertAndSend("topicExchange","message.queue.green.abc",msg);
 }
}

3、MQReceiver.java

package com.xxxx.seckill.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
/**
* @author zhoubin
* @since 1.0.0
*/
@Service
@Slf4j
public class MQReceiver {
 @RabbitListener(queues = "queue_topic01")
 public void receive01(Object msg) {
 log.info("QUEUE01接受消息:" + msg);
 }
 @RabbitListener(queues = "queue_topic02")
 public void receive02(Object msg) {
 log.info("QUEUE02接受消息:" + msg);
 }
}

4、UserController.java

/**
* 测试发送RabbitMQ消息
*/
@RequestMapping("/mq/topic01")
@ResponseBody
public void mq01() {
   mqSender.send01("Hello,Red");
}
/**
* 测试发送RabbitMQ消息
*/
@RequestMapping("/mq/topic02")
@ResponseBody
public void mq02() {
   mqSender.send02("Hello,Green");
}

5、测试

调用 mq/topic01 接口,消息经由交换机绑定的 #.queue.# RoutingKey 转发到 queue_topic01 队列

调用 mq/topic02 接口,消息经由交换机绑定的 *.queue.# #.queue.# RoutingKey 转发到
queue_topic01 queue_topic02 队列

Headers模式

不依赖 routingkey ,使用发送消息时 basicProperties 对象中的 headers 匹配队列
headers 是一个键值对类型,键值对的值可以是任何类型
在队列绑定交换机时用 x-match 来指定, all 代表定义的多个键值对都要满足, any 则代表只要满足
一个可以了

1、RabbitMQConfig.java

package com.xxxx.seckill.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.HeadersExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
/**
* @author zhoubin
* @since 1.0.0
*/
@Configuration
public class RabbitMQConfig {
 private static final String QUEUE01 = "queue_header01";
 private static final String QUEUE02 = "queue_header02";
 private static final String EXCHANGE = "headersExchange";
 @Bean
 public Queue queue01(){
 return new Queue(QUEUE01);
 }
 @Bean
 public Queue queue02(){
 return new Queue(QUEUE02);
 }
 @Bean
 public HeadersExchange headersExchange(){
 return new HeadersExchange(EXCHANGE);
 }
 @Bean
 public Binding binding01(){
 Map<String,Object> map = new HashMap<>();
 map.put("color","red");
 map.put("speed","low");
 return
BindingBuilder.bind(queue01()).to(headersExchange()).whereAny(map).match();
 }
 @Bean
 public Binding binding02(){
 Map<String,Object> map = new HashMap<>();
 map.put("color","red");
 map.put("speed","fast");
 return
BindingBuilder.bind(queue02()).to(headersExchange()).whereAll(map).match();
 }
}

2、MQSender.java

package com.xxxx.seckill.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author zhoubin
* @since 1.0.0
*/
@Service
@Slf4j
public class MQSender {
 @Autowired
 private RabbitTemplate rabbitTemplate;
 public void send01(String msg) {
 log.info("发送消息(被两个queue接受):" + msg);
 MessageProperties properties = new MessageProperties();
 properties.setHeader("color", "red");
 properties.setHeader("speed", "fast");
 Message message = new Message(msg.getBytes(), properties);
 rabbitTemplate.convertAndSend("headersExchange", "", message);
 }
 public void send02(String msg) {
 log.info("发送消息(被01队列接受):" + msg);
 MessageProperties properties = new MessageProperties();
 properties.setHeader("color", "red");
 properties.setHeader("speed", "normal");
 Message message = new Message(msg.getBytes(), properties);
 rabbitTemplate.convertAndSend("headersExchange", "", message);
 }
}

3、MQReceiver.java

package com.xxxx.seckill.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
/**
* @author zhoubin
* @since 1.0.0
*/
@Service
@Slf4j
public class MQReceiver {
 @RabbitListener(queues = "queue_header01")
 public void receive01(Message message) {
 log.info("QUEUE01接受Message对象:" + message);
 log.info("QUEUE01接受消息:" + new String(message.getBody()));
 }
 @RabbitListener(queues = "queue_header02")
 public void receive02(Message message) {
 log.info("QUEUE02接受Message对象:" + message);
 log.info("QUEUE02接受消息:" + new String(message.getBody()));
 }
}

4、UserController.java

/**
* 测试发送RabbitMQ消息
*/
@RequestMapping("/mq/header01")
@ResponseBody
public void mq01() {
   mqSender.send01("Hello,header01");
}
/**
* 测试发送RabbitMQ消息
*/
@RequestMapping("/mq/header02")
@ResponseBody
public void mq02() {
   mqSender.send02("Hello,header02");
}

5、测试

queue_header01 设置 x-match any queue_header02 设置 x-match all 。因此调用 mq/header01
接口,可以匹配两个队列

调用 mq/header02 接口,只能匹配 queue_header01 队列

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

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

相关文章

JAVA12_06学习总结(JDBC,工具类优化)

今日内容 1. PreparedStatement PreparedStatement--预编译步骤1)注册驱动2)获取数据库连接对象3)准备sql语句--不需要拼接--需要的参数全部使用 ? 占位符4)通过数据库连接对象,获取预编译对象,同时将sql语句房费数据库,将参数和参数类型都存储在预编译中Connection中的方法…

均匀传输线的串扰和饱和长度

下图为串扰的电路模型&#xff0c;动态线与静态线之间通过互容与互感联系&#xff0c;这样也说明了动态线的信号耦合到静态线上的条件是存在di/dt或者dv/dt时&#xff0c;也就是说只在信号边沿上产生串扰&#xff0c;当电压或者电流为常数的时候静态线上就不会有串扰的信号。 信…

扩散模型:Diffusion models as plug-and-play priors作为即插即用先验的扩散模型

扩散模型&#xff1a;Diffusion models as plug-and-play priors作为即插即用先验的扩散模型0.摘要1.概述2.方法2.1.问题设置2.2.将去噪扩散概率模型作为先验3.实验&#xff1a;图像生成3.1.MNIST的简单说明3.2.使用现成组件条件生成脸部图像4.实验&#xff1a;语义分割附录B&a…

Ubuntu 20.04 系统最快安装WRF软件手册

前言 天气研究和预报&#xff08;WRF&#xff09;模型是一种中尺度数值天气预报系统&#xff0c;在全球范围内用于业务预报和研究目的。 这是在基于Intel的i7&#xff08;12核&#xff09;Linux Ubuntu 20.04 LTS系统上安装WRF 4.2.1的版本。这将有助于初学者在普通台式机上实现…

树莓派4b+mcp2515实现CAN总线通讯和系统编程(一.配置树莓派CAN总线接口)

文章目录前言硬件连线树莓派环境准备启用树莓派ssh启用mcp2515驱动下载can-utils工具测试CAN通讯开启CAN网卡测试发送和接收前言 树莓派本身是没有CAN通讯能力的&#xff0c;但他有mcp2515模块的驱动&#xff0c;可以通过SPI来控制mcp2515进行CAN的通讯。 本章主要讲,如何使能…

基于卡尔曼滤波的二维目标跟踪(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

双十二选哪个品牌led灯好一点?国产led灯这些品牌护眼好

现在绝大部分人造灯光都是使用led灯珠作为发光源了&#xff0c;所以led灯普遍的质量都比较好&#xff0c;也能护眼&#xff0c;特别是习惯晚上熬夜工作、学习、看书的人群&#xff0c;也都会选择led台灯来辅助照明&#xff0c;因为相比传统的家用室内顶灯&#xff0c;led护眼灯…

【小游戏】Unity游戏愤怒的足球(小鸟)

目录 1.弹弓逻辑 2.鸟的逻辑 3.GameManager主逻辑 文末有源工程地址 难度系数: ★★★★☆ 游戏玩法: 愤怒的足球,其实就是经典的愤怒的小鸟换图 项目简介: 功能完善,主要代码逻辑完整 本文内容: 记录一下这个工程,对内部代码逻辑没有深入了解有待以后发掘 1.弹弓逻…

workerman 聊天demo

1.demo下载 链接: https://pan.baidu.com/s/1MOqcDwvrZGgaYpZUBxxZiA 提取码: 2yqf 2.安装workerman 我这里使用的是tp5框架 下载官方压缩包解压到根目录 3.workerman 数据发送相关类 将worker目录放到项目extend文件夹中 4.启用workerman 登录服务器 linux启动方式&…

安卓APP源码和设计报告——购物APP的设计与实现

2021—2022学年第二学期期末考试 《Android手机软件开发》实践考核 项目设计说明书 项目名称&#xff1a; 购物APP的设计与实现 专 业&#xff1a; 计算机科学与技术 学 号&#xff1a; 姓 名&#xff1a; 任课教师&#xff1a; 2022年6月12日 目 录 1.项目概述11 2…

阿里云搭建博客之如何设置网页为中文

今天&#xff0c;在阿里云上参照“我的教程”–“搭建云上博客”中的指导&#xff0c;基于ApachemysqlWordPress搭建个人博客&#xff0c;参照上面的教程完成博客的搭建。但证登录博客后&#xff0c;发现业务展示为英文。在setting—>site language 设置中只有英文&#xff…

(附源码)springboot实验室预约管理系统 毕业设计 261141

实验室预约管理系统的设计与实现 摘 要 远程预约是一种全新的网络租用方式&#xff0c;它通过互联网突破了时间和空间限制&#xff0c;实现了便捷快速的预约与管理功能。在对数据信息有效组织并整合了一定使用功能后&#xff0c;远程预约系统可以方便地实现预约与取消&#xff…

如何在centos上安装nvidia驱动

首先查询服务器的gpu型号 [kfkbigdata-pro01 ~]$ lshw -C display WARNING: you should run this program as super-user. *-display description: VGA compatible controller product: SVGA II Adapter vendor: VMware physical id: f bus info: pci0000:00:0f.0 version: 00…

[附源码]JAVA毕业设计日常办公管理系统(系统+LW)

[附源码]JAVA毕业设计日常办公管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

【双碳环保】AcrelCloud-3500餐饮油烟监测云平台应用分析

背景概述 餐饮业油烟是大气中挥发性有机物&#xff08;VOCS&#xff09;和PM10的主要来源之一。近年来随着环保治理的加强&#xff0c;各地餐饮油烟条例相继推出&#xff0c;相关执法部门对大气监测&#xff0c;特别是餐饮油烟的治理监管都非常重视&#xff0c;为贯彻落实大气…

日本知名汽车零部件公司巡礼系列之株式会社123

株式会社123 业务内容&#xff1a; 各种自动组装机检测机的设计制作、半导体•液晶的设计制做、各种自动包装•省力化设备的设计制作、模具刀具的设计制作、各种零件的制作。 公司简介&#xff1a; 资本金&#xff1a;1000万日元&#xff08;2022年汇率折合人民币约50万元&a…

SystemV 信号量(一) —— SystemV信号量的相关操作函数

SystemV IPC 方案的相关内容都是通过 “房间密码”来创建房间&#xff0c;获取到房间的ID&#xff0c;后面其他进程也可以根据这个房间密码来拿到同一个房间的ID。这是理解下面这些操作函数的关键。 目录 1、信号量集合的创建 semget 2、信号量的初始化 / 销毁 semctl 3、信…

C/C++入门001-概述环境搭建与案例

文章目录1.C语言概述1.1 计算机与程序1.1.1 什么是计算机1.1.2 什么是计算机程序 ?1.2 进制转化1.3 计算机语言1.4 C语言发展1.5 安装开发工具与编译器1.5.1 安装 codeblocks1.5.2 设置MinGW的环境变量1.6 C语言的HelloWorld1.6.1 入门1.6.2 demo案例1.C语言概述 参考&#x…

基于jsp+mysql+ssm大学本科考研服务系统-计算机毕业设计

项目介绍 考研是一个艰难辛苦的过程&#xff0c;需要具备充沛的精力&#xff1b;考研是一场旷日持久的战争&#xff0c;需要吃苦耐劳的精神和持之以恒的毅力和意志&#xff0c;如果三天打鱼&#xff0c;两天晒网&#xff0c;那么很难在考研大军中胜出&#xff1b;考研的过程中…

UDP-阿拉伯糖,15839-78-8,UDP-L-Arabinose,阿拉伯糖偶联核苷酸

常用中文名&#xff1a;[[(2R,3S,4R,5R)-5-(2,4-dioxopyrimidin-1-yl)-3,4-dihydroxyoxolan-2-yl]methoxy-hydroxyphosphoryl] [(2R,3R,4S,5S)-3,4,5-trihydroxyoxan-2-yl] hydrogen phosphate 常用英文名&#xff1a;[[(2R,3S,4R,5R)-5-(2,4-dioxopyrimidin-1-yl)-3,4-dihydro…