消息系统和流系统
直接调用通常是用于诸如远程过程调用的技术
消息系统有很多,包括
Apache的 ActiveMQ RabbitMQ
Apache的 Kafka pulsar
Redis
场景:
异步通信 解耦 冗余 缓冲 顺序保证
扩展性 可恢复性 过载保护
协议:
Advanced Message Queuing Protocol
AMQP 一个提供统一消息服务的应用层标准高级消息队列协议,
是应用层协议的一个开放标准,为面向消息的中间件设计
基于此协议的客户端与消息中间件可传递消息,
并不受客户端/中间件不同产品,不同的开发语言等条件的限制
MQTT协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议
STOMP(Streaming Text Orientated Message Protocol)是流文本定向消息协议,
是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议。
XMPP(可扩展消息处理现场协议,Extensible Messaging and Presence Protocol)是基于可扩展标记语言(XML)的协议,
多用于即时消息(IM)以及在线现场探测
其他基于TCP/IP自定义的协议
有些特殊框架(如:redis、kafka、zeroMq等)根据自身需要未严格遵循MQ规范,
而是基于TCPIP自行封装了一套协议,通过网络socket接口进行传输,实现了MQ的功能
开发:
RabbitMQ 服务器是用Erlang语言编写的
ActiveMQ 是一个纯Java程序
充分定义网络协议和消息代理服务的功能语义
消息交换的体系结构:
存储转发 多个消息发送者, 单个消息接收者
分布式事务 多个消息发送者, 多个消息接收者
发布订阅 多个消息发送者, 多个消息接收者
基于内容的路由 多个消息发送者, 多个消息接收者
文件传输队列 多个消息发送者, 多个消息接收者
点对点连接 单个消息发送者, 单个消息接收者
创建和发布自定义的Message
01.进入自己的workspace-
cd ~/myros
02. 创建一个包, 取名为 commonMsgs,用来发布编码器数据信息
catkin_create_pkg commonMsgs roscpp rospy std_msgs
03.创建msg文件
文件夹
文件 --》 文件后缀msg 文件格式
04.编辑配置文件
001.package.xml中添加编译依赖与执行依赖
说明:
common_msgs:
|actionlib_msgs | diagnostic_msgs
| geometry_msgs
| sensor_msgs
| nav_msgs | shape_msgs | stereo_msgs | trajectory_msgs | visualization_msgs
laser_pipeline:
|laser_assembler | laser_filters | laser_geometry
image_pipeline:
|camera_calibration | depth_image_proc | image_proc | image_publisher
| image_rotate | image_view | stereo_image_proc
示例:
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<build_export_depend>roscpp</build_export_depend>
<build_export_depend>rospy</build_export_depend>
<build_export_depend>std_msgs</build_export_depend>
<build_export_depend>message_generation</build_export_depend>
<build_depend>geometry_msgs</build_depend>
<build_depend>sensor_msgs</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
<exec_depend>message_exectime</exec_depend>
<exec_depend>geometry_msgs</exec_depend>
<exec_depend>sensor_msgs</exec_depend>
002.CMakeLists.txt编辑 msg 相关配置
用find_packag中加入 message_generation 的依赖
需要加入 message_generation,必须有 std_msgs
示例
project(commonMsgs)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
geometry_msgs
sensor_msgs
)
## Generate messages in the 'msg' folder
add_message_files(
FILES ControlCommand.msg
CAN_SpecialInfo.msg
CAN_WheelSpeedInfo.msg
)
#planning
add_message_files(
DIRECTORY planning
FILES Chassis.msg
FusionObject.msg
FusionObjectsArray.msg
RampInfo.msg
)
# 生成消息时依赖于 std_msgs
generate_messages(
DEPENDENCIES
std_msgs
)
#执行时依赖
catkin_package(
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
)
05.编译生成可以被Python或者C++调用的中间文件
cd ~/myros/commonMsgs
catkin_make
06.中间文件查看:
C++ 需要调用的中间文件
(.../工作空间/devel/include/包名/xxx.h)
Python 需要调用的中间文件
(.../工作空间/devel/lib/python3/dist-packages/包名/msg)