微服务即时通信系统---(五)框架学习

devtools/2025/3/19 19:22:36/

目录

ODB

介绍

安装

build2安装

odb-compiler安装

ODB运行时库安装

mysql和客户端开发包安装

boost profile库安装

总体打包安装

总体卸载

总体升级

头文件包含和编译时指明库

ODB常见操作介绍

类型映射

ODB编程

类与接口介绍

mysql连接池对象类

mysql客户端操作句柄类

mysql事务操作类

针对可能为空的字段封装的类似于智能指针的类型

针对查询结果所封装的容器类和条件类

mysql操作句柄获取封装

rabbitMQ C++

安装

服务器访问地址

简单使用

添加用户

UI访问

安装rabbitMQ客户端库

安装rabbitMQ的C++客户端库(AMQP-CPP)

AMQP-CPP的使用介绍

介绍

头文件包含和链接库

使用(TCP模式)

常用类与接口

channel

ev

二次封装(rabbitMQClient.hpp)

短信验证码SDK

购买

安装

头文件和编译时链接库

注意

 验证码发送代码封装(verificationCodeSend.hpp)

验证码生成代码封装(utils.hpp)

语音识别SDK

介绍

安装

头文件包含 

编译时指明库(注意)

代码样例

test.cc

Makefile

测试结果

语音识别代码封装(speechRecognition.hpp)

封装结果测试


本章主要是学习和使用本项目中所需使用到的一些框架。

ODB

介绍

ODB(Object-Relational Mapping for C++)是一个用于C++的对象关系映射(ORM)工具,允许开发者将C++对象直接映射到数据库表,简化数据库操作。

特点:

跨平台性兼容多种数据库(MySQL、PostgreSQL、Oracle等)和操作系统(Windows、Linux、macOS等)。
自动生成代码通过ODB编译器自动生成数据库操作的C++代码,减少手动编写SQL的工作量。
类型安全提供编译时类型检查,减少运行时错误。
事务管理支持事物,确保数据一致性。
查询语言提供类似SQL的查询语言,支持复杂查询。

安装

ODB2.5安装,整个安装过程时间比较长,视网络情况而定。

build2安装

build2安装时,可能会版本更新,从16变成17等,因此需要特别注意。

build2安装步骤:build2 | Installation

Create the build2 build directory, for example ~/build2-build in your home directory, then run:

$ cd ~/build2-build$ curl -sSfO https://download.build2.org/0.17.0/build2-install-0.17.0.sh$ shasum -a 256 -b build2-install-0.17.0.shb84e4114c61aa94c3f6278f010a0dc0536dda65ac39d3863152ec9b64510b86e$ sh build2-install-0.17.0.sh

Or, to upgrade from 0.16.0:

$ sh build2-install-0.17.0.sh --upgrade

To uninstall:

$ sh build2-install-0.17.0.sh --uninstall

安装中如果因为网络问题,出现安装超时失败,解决办法是将超时时间设置得更长一些:

sh build2-install-0.17.0.sh --timeout 1800

odb-compiler安装

 sudo apt-get install gcc-11-plugin-dev # gcc版本根据需求而定mkdir odb-build && cd odb-build bpkg create -d odb-gcc-N cc    \ config.cxx=g++                  \ config.cc.coptions=-O3          \ config.bin.rpath=/usr/lib \ config.install.root=/usr/  \ config.install.sudo=sudocd odb-gcc-Nbpkg build odb@https://pkg.cppget.org/1/betabpkg test odb 
test odb-2.5.0-b.25+1/tests/testscript{testscript} 
tested odb/2.5.0-b.25+1bpkg install odbodb --version# 如果报错了, 找不到ODB, 可能是没有对应的配置文件或者ODB路径, 解决方法:
sudo echo 'export PATH=${PATH}:/usr/local/bin' >> ~/.bashrc 
export PATH=${PATH}:/usr/local/bin

查询ODB版本,出现以下情况表示安装成功:

$ odb --version
ODB object-relational mapping (ORM) compiler for C++ 2.5.0-b.27
Copyright (c) 2009-2024 Code Synthesis.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

ODB运行时库安装

dev@dev-host:~/workspace/odb-build/odb-gcc-N$ cd ..dev@dev-host:~/workspace/odb-build$ bpkg create -d libodb-gcc-N cc  \ config.cxx=g++                  \ config.cc.coptions=-O3          \ config.install.root=/usr/  \ config.install.sudo=sudo dev@dev-host:~/workspace/odb-build$ cd libodb-gcc-N dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg add https://pkg.cppget.org/1/beta dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg fetch dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg build libodb dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg build libodb-mysql 

mysql和客户端开发包安装

sudo apt install mysql-server 
sudo apt install -y libmysqlclient-dev 

如果已经有mysql开发包就不用安装了,记得修改配置文件和用户密码等。

boost profile库安装

dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg build libodb-boost

总体打包安装

dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg install --all --recursive

总体卸载

dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg uninstall --all --recursive 

总体升级

dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg fetch 
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg status 
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg uninstall --all --recursive 
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg build --upgrade --recursive 
dev@dev-host:~/workspace/odb-build/libodb-gcc-N$ bpkg install --all --recursive 

头文件包含和编译时指明库

头文件:

#include <odb/database.hxx>
#include <odb/mysql/database.hxx>// 需要加上对应的hxx文件生成的odb.hxx文件
#include "student.hxx"
#include "student-odb.hxx"

连接库:

-lodb-mysql -lodb -lodb-boost

ODB常见操作介绍

类型映射

ODB中的类型(MySQL的数据类型)和C++中的数据类型存在一一的映射关系。

C++ TypeMySQL TypeDefault NULL Semantics
boolTINYINT(1)NOT NULL
charchar (1)NOT NULL
signed charTINYINTNOT NULL
unsigned charTINYINT UNSIGNEDNOT NULL
shortSMALLINTNOT NULL
unsigned shortSMALLINT UNSIGNEDNOT NULL
intINTNOT NULL
unsigned intINT UNSIGNEDNOT NULL
longBIGINTNOT NULL
unsigned longBIGINT UNSIGNEDNOT NULL
long longBIGINTNOT NULL
unsigned long longBIGINT UNSIGNEDNOT NULL
floatFLOATNOT NULL
doubleDOUBLENOT NULL
std::stringTEST/VARCHAR(255)NOT NULL
char[N]VARCHAR(N-1)NOT NULL
gregorian::dateDATENULL
posix_time::ptimeDATETIMENULL
posix_time::time_durationTIMENULL

ODB编程

 ODB在数据元结构定义时,使用预处理器指令(#pragma)来提供元数据,这些元数据指示如何将C++类型映射到数据库模式。

这些#pragma指令是在C++代码中使用的,但不是C++语言的一部分,而是特定于ODB编译器的扩展。

#pragma db object用于声明某一个类是数据库对象,这个类最终将映射到数据库中的一张表。类的各项成员,最终就是表的column。
#pragma db table("table_name")指定该类映射到数据库中的表名。如果不指定,默认为类名。
#pragma db object table("table_name")前两个合二为一。
#pragma db id标明类中的某一个成员变量,作为数据库表中的主键。
#pragma db column("column_name")指定类成员变量映射到数据库表中的column名。如果不指定,默认为变量名。
#pragma db view用于声明某个类是一个数据库视图,而不是一个持久化表。
#pragma db session用于声明一个全局或成员变量是数据库会话。
#pragma db query("query")用于定义自定义的查询函数。
#pragma db index("index_name")指定成员变量应该被索引。
#pragma db default("default_value")指定成员变量的默认值。
#pragma db unique指定成员变量或一组变量具有唯一性约束。
#pragma db not_null指定成员变量不能为空。
#pragma db auto指定成员变量的值在插入时自增(比如主键)。
#pragma db transient指定成员变量不应该被持久化到数据库表中。
#pragma db type("type_name")指定成员变量的数据库类型。
#pragma db convert("convert")指定用于成员变量的自定义类型转换器。
#pragma db pool("pool_name")指定用于数据库连接的连接池。
#pragma db trigger("trigger_name")指定在插入、更新或删除操作时触发的触发器。

类与接口介绍

mysql连接池对象类

/usr/include/odb/mysql/connection-factory.hxx:

namespace odb{
namespace mysql{class LIBODB_MYSQL_EXPORT connection_pool_factory:public connection_factory{public:connection_pool_factory (std::size_t max_connections = 0,std::size_t min_connections = 0,bool ping = true)}
}

odb::mysql::connection_pool_factory 是 ODB 库中用于管理 MySQL 数据库连接池的类。它的主要作用是创建和管理一个数据库连接池,以提高数据库操作的性能和效率。

作用:

连接池管理通过连接池管理多个数据库连接,避免频繁创建和销毁连接的开销。
性能优化在高并发场景下,连接池可以显著提高数据库操作的性能。
资源复用连接池中的连接可以被多个操作复用,减少资源浪费。

mysql客户端操作句柄类

/usr/include/odb/mysql/database.hxx:

namespace odb{
namespace mysql{class LIBODB_MYSQL_EXPORT database: public odb::database{database (const std::string& user,const std::string& passwd,const std::string& db,

http://www.ppmy.cn/devtools/168419.html

相关文章

LabVIEW 线性拟合

该 LabVIEW 程序实现了 线性拟合&#xff08;Linear Fit&#xff09;&#xff0c;用于计算给定一组数据点的斜率&#xff08;Slope&#xff09;和截距&#xff08;Intercept&#xff09;&#xff0c;并将结果可视化于 XY Graph 中。本案例适用于数据拟合、实验数据分析、传感器…

RCore学习记录001

配置环境 我选择的操作系统环境是Ubuntu24.04的虚拟机 安装qemu7.0.0 安装依赖库 sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build build-essential git-email libaio-dev libbluetooth-dev libcapstone-dev libbrlapi-dev libb…

【c++】c++语言中““符号的用途介绍

c语言中&#xff0c;“&”符号有4种用途&#xff1a;逻辑与运算符、按位与运算符、取地址运算符、引用标识符。前三种作用在c语言和c语言中是共有的&#xff0c;而第4种作用是c中特有的。下边对这4种用途做个介绍。 一、几个相关的概念 1、运算符 c运算符是指用于执行程序…

Git:速查手册

Git&#xff1a;速查手册 1.基础知识四个区域文件状态基本概念特殊文件GitFlow 2.CMD初始化设置创建仓库添加与提交撤销与恢复状态与差异远程仓库操作分支Stash: 1.基础知识 四个区域 工作区&#xff08;Working Directory&#xff09;&#xff1a;你在电脑里能实际看到的目录。…

ubuntu 没有网卡的解决方案

(1) 输入sudo service network-manager stop (2) sudo rm /var/lib/NetworkManager/NetworkManager.state (3) sudo service network-manager start (4) sudo vim /etc/NetWorkManager/NetworkManager.conf&#xff0c;将其中的managedfalse改为managedtrue 或者使用gedit&…

一窥DeepSeek开源EPLB项目:揭开技术背后的面纱

摘要 在DeepSeek开源DualPipe项目的同一天&#xff0c;EPLB项目也正式对外公开。EPLB&#xff08;Enhanced Pipeline Balancing&#xff09;并非一蹴而就的奇迹&#xff0c;而是经过长时间的研发与优化。该项目旨在通过改进管道平衡机制&#xff0c;提升系统的稳定性和效率。本…

【蓝桥杯】省赛:神奇闹钟

思路 python做这题很简单&#xff0c;灵活用datetime库即可 code import os import sys# 请在此输入您的代码 import datetimestart datetime.datetime(1970,1,1,0,0,0) for _ in range(int(input())):ls input().split()end datetime.datetime.strptime(ls[0]ls[1],&quo…

java 使用命令创建jar的常用参数整理

在Java中&#xff0c;创建JAR文件的命令是jar。以下是常用参数的表格展示&#xff1a; 参数信息含义使用场景使用示例c创建新的JAR文件用于创建一个新的JAR文件当需要打包类文件和资源文件时jar cf myapp.jar MyClass.classt列出JAR文件内容显示JAR文件中的内容列表查看JAR文件…