当前位置: 首页 > news >正文

3d网站带后台下载wordpress 中文采集

3d网站带后台下载,wordpress 中文采集,第三方物流网站建设,地域名网址查询要确认 ACC_JSON 模块是否已经成功将计费信息推送到消息队列#xff08;MQueue#xff09;#xff0c;以及如何从队列中取值#xff0c;可以按照以下步骤进行操作#xff1a; 1. 确认 ACC_JSON 已推送到队列 1.1 配置 ACC_JSON 确保 ACC_JSON 模块已正确配置并启用。以下…要确认 ACC_JSON 模块是否已经成功将计费信息推送到消息队列MQueue以及如何从队列中取值可以按照以下步骤进行操作 1. 确认 ACC_JSON 已推送到队列 1.1 配置 ACC_JSON 确保 ACC_JSON 模块已正确配置并启用。以下是一个示例配置 loadmodule acc_json.so modparam(acc_json, log_flag, 1) # 启用 JSON 记录 modparam(acc_json, log_extra, ua$hdr(User-Agent);uuid$avp(i:123)) # 记录额外信息route {if (method INVITE) {setflag(1); # 设置计费标志t_relay(); # 转发请求} }1.2 检查 Kamailio 日志 启动 Kamailio 并观察日志输出。如果 ACC_JSON 模块成功将数据推送到队列日志中会显示类似以下内容INFO: acc_json: JSON accounting data pushed to MQueue1.3 检查消息队列 ACC_JSON 模块使用 Kamailio 的消息队列MQueue来存储 JSON 数据。默认情况下消息队列的数据会存储在 Kamailio 的共享内存中。你可以使用 Kamailio 的 MIManagement Interface 或 RPCRemote Procedure Call 命令来检查队列状态。 2. 从队列中取值 2.1 使用 MI 命令 Kamailio 提供了 MI 命令来管理消息队列。以下是一些常用的 MI 命令 2.1.1 检查队列状态 kamcmd mq.stats输出示例{queues: {acc_json_queue: {size: 10, # 队列中当前的消息数量max_size: 1000, # 队列的最大容量dropped: 0 # 丢弃的消息数量}} }2.1.2 从队列中读取消息 kamcmd mq.read acc_json_queue输出示例{messages: [{method: INVITE,from_tag: abc123,to_tag: xyz456,callid: 12345,sip_code: 200,sip_reason: OK,time: 2025-02-01 12:34:56,ua: SomeUserAgent/1.0,uuid: 12345},...] }2.2 使用 RPC 命令 Kamailio 也支持通过 RPC 命令管理消息队列。以下是一些常用的 RPC 命令 2.2.1 检查队列状态 kamctl rpc mq.stats输出示例{queues: {acc_json_queue: {size: 10,max_size: 1000,dropped: 0}} }2.2.2 从队列中读取消息 kamctl rpc mq.read acc_json_queue输出示例{messages: [{method: INVITE,from_tag: abc123,to_tag: xyz456,callid: 12345,sip_code: 200,sip_reason: OK,time: 2025-02-01 12:34:56,ua: SomeUserAgent/1.0,uuid: 12345},...] }3. 自定义队列处理 如果默认的消息队列功能无法满足需求可以通过以下方式自定义队列处理 3.1 使用事件路由 Kamailio 支持通过事件路由Event Route处理消息队列中的数据。例如 event_route[mq:acc_json_queue] {xlog(L_INFO, Received JSON accounting data: $mqk($mqv)\n);# 在这里处理队列中的数据 }3.2 编写外部脚本 可以编写外部脚本如 Python、Shell 脚本通过 Kamailio 的 MI 或 RPC 接口定期从队列中读取数据并进行进一步处理。 4. 调试和验证 调试日志启用 Kamailio 的调试日志观察 ACC_JSON 模块的行为kamailio -dd -E -e队列监控使用 MI 或 RPC 命令定期检查队列状态确保数据被正确推送和读取。 总结 通过 Kamailio 的 MI 或 RPC 命令可以确认 ACC_JSON 是否成功将数据推送到队列并从队列中读取数据。如果需要更复杂的处理可以使用事件路由或编写外部脚本。确保 Kamailio 配置正确并定期监控队列状态以避免数据丢失。 要实现 ACC_JSON 模块将计费信息推送到队列并由 Go 语言从队列中取值并写入数据库可以按照以下步骤操作 1. Kamailio 配置 1.1 加载 ACC_JSON 模块 在 Kamailio 配置文件中加载 ACC_JSON 模块并配置消息队列 loadmodule acc_json.so# 配置 ACC_JSON modparam(acc_json, log_flag, 1) # 启用 JSON 记录 modparam(acc_json, log_extra, ua$hdr(User-Agent);uuid$avp(i:123)) # 记录额外信息# 配置消息队列 modparam(mq, mq_size, 1000) # 设置队列大小 modparam(mq, mq_name, acc_json_queue) # 设置队列名称route {if (method INVITE) {setflag(1); # 设置计费标志t_relay(); # 转发请求} }1.2 验证数据推送 启动 Kamailio 并验证数据是否成功推送到队列 kamcmd mq.stats如果队列中有数据说明 ACC_JSON 模块已成功推送。 2. Go 语言实现 Go 语言程序需要从 Kamailio 的消息队列中读取数据并将其写入数据库。以下是详细实现思路和代码示例。 2.1 实现思路 连接 Kamailio通过 Kamailio 的 RPC 接口连接到消息队列。读取队列数据定期从队列中读取 JSON 格式的计费信息。解析 JSON 数据将读取的 JSON 数据解析为 Go 结构体。写入数据库将解析后的数据写入数据库如 MySQL、PostgreSQL 等。 2.2 代码示例 2.2.1 安装依赖 首先安装 Go 语言的相关依赖 go get github.com/zero-os/gorpc # Kamailio RPC 客户端 go get github.com/go-sql-driver/mysql # MySQL 驱动2.2.2 Go 代码实现 以下是一个完整的 Go 程序示例 package mainimport (database/sqlencoding/jsonfmtlogtimegithub.com/zero-os/gorpc_ github.com/go-sql-driver/mysql )// 定义计费信息结构体 type AccountingRecord struct {Method string json:methodFromTag string json:from_tagToTag string json:to_tagCallID string json:callidSipCode string json:sip_codeSipReason string json:sip_reasonTime string json:timeUserAgent string json:uaUUID string json:uuid }// 数据库配置 const (dbDriver mysqldbUser rootdbPass passworddbName kamailio_acc )func main() {// 连接 Kamailio RPCclient : gorpc.NewClient(tcp, 127.0.0.1:2049) // Kamailio RPC 地址defer client.Close()// 连接数据库db, err : sql.Open(dbDriver, fmt.Sprintf(%s:%s/%s, dbUser, dbPass, dbName))if err ! nil {log.Fatalf(Failed to connect to database: %v, err)}defer db.Close()// 定期从队列中读取数据for {// 从队列中读取消息var result map[string]interface{}err : client.Call(mq.read, acc_json_queue, result)if err ! nil {log.Printf(Failed to read from queue: %v, err)time.Sleep(5 * time.Second) // 等待 5 秒后重试continue}// 解析 JSON 数据messages, ok : result[messages].([]interface{})if !ok {log.Println(No messages in queue)time.Sleep(5 * time.Second)continue}// 处理每条消息for _, msg : range messages {msgJSON, err : json.Marshal(msg)if err ! nil {log.Printf(Failed to marshal message: %v, err)continue}var record AccountingRecordif err : json.Unmarshal(msgJSON, record); err ! nil {log.Printf(Failed to unmarshal message: %v, err)continue}// 将数据写入数据库if err : saveToDatabase(db, record); err ! nil {log.Printf(Failed to save record to database: %v, err)}}time.Sleep(1 * time.Second) // 每隔 1 秒检查一次队列} }// 将数据写入数据库 func saveToDatabase(db *sql.DB, record AccountingRecord) error {query : INSERT INTO acc_records (method, from_tag, to_tag, callid, sip_code, sip_reason, time, ua, uuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)_, err : db.Exec(query,record.Method,record.FromTag,record.ToTag,record.CallID,record.SipCode,record.SipReason,record.Time,record.UserAgent,record.UUID,)return err }3. 数据库表设计 在 MySQL 中创建用于存储计费信息的表 CREATE TABLE acc_records (id INT AUTO_INCREMENT PRIMARY KEY,method VARCHAR(50) NOT NULL,from_tag VARCHAR(100) NOT NULL,to_tag VARCHAR(100) NOT NULL,callid VARCHAR(100) NOT NULL,sip_code VARCHAR(10) NOT NULL,sip_reason VARCHAR(100) NOT NULL,time DATETIME NOT NULL,ua VARCHAR(255),uuid VARCHAR(100) );4. 运行程序 启动 Kamailio确保 ACC_JSON 模块正常运行。运行 Go 程序go run main.go程序会定期从 Kamailio 的消息队列中读取数据并将其写入数据库。 5. 验证结果 检查数据库中的 acc_records 表确认数据是否成功写入。观察 Go 程序的日志输出确保没有错误。 总结 通过以上步骤可以实现 ACC_JSON 模块将计费信息推送到队列并由 Go 语言程序从队列中读取数据并写入数据库。这种方法适用于需要将 Kamailio 的计费信息与外部系统集成的场景。 Gin框架代码实际 如果使用 Gin 框架可以将 Go 程序组织成一个更结构化的 Web 服务同时保留从 Kamailio 消息队列中读取数据并写入数据库的功能。以下是重新整理的代码示例 1. 项目结构 kamailio-acc/ ├── main.go ├── handlers/ │ └── acc_handler.go ├── models/ │ └── acc_model.go ├── services/ │ └── queue_service.go ├── config/ │ └── config.go └── go.mod2. 代码实现 2.1 main.go 主程序入口初始化 Gin 框架并启动服务。 package mainimport (kamailio-acc/configkamailio-acc/handlerskamailio-acc/serviceslogtimegithub.com/gin-gonic/gin )func main() {// 加载配置cfg, err : config.LoadConfig()if err ! nil {log.Fatalf(Failed to load config: %v, err)}// 初始化数据库db, err : config.InitDB(cfg)if err ! nil {log.Fatalf(Failed to initialize database: %v, err)}// 初始化 Kamailio RPC 客户端client : services.NewKamailioClient(cfg.KamailioRPCAddr)defer client.Close()// 启动队列监听服务go services.StartQueueListener(client, db)// 初始化 Gin 框架r : gin.Default()// 注册路由handlers.RegisterRoutes(r, db)// 启动 Web 服务if err : r.Run(cfg.ServerAddr); err ! nil {log.Fatalf(Failed to start server: %v, err)} }2.2 config/config.go 配置文件加载和数据库初始化。 package configimport (database/sqlfmtlog_ github.com/go-sql-driver/mysqlgithub.com/spf13/viper )type Config struct {ServerAddr string mapstructure:SERVER_ADDRKamailioRPCAddr string mapstructure:KAMAILIO_RPC_ADDRDBDriver string mapstructure:DB_DRIVERDBUser string mapstructure:DB_USERDBPassword string mapstructure:DB_PASSWORDDBName string mapstructure:DB_NAME }func LoadConfig() (*Config, error) {viper.SetConfigFile(.env)if err : viper.ReadInConfig(); err ! nil {return nil, fmt.Errorf(failed to read config file: %v, err)}var cfg Configif err : viper.Unmarshal(cfg); err ! nil {return nil, fmt.Errorf(failed to unmarshal config: %v, err)}return cfg, nil }func InitDB(cfg *Config) (*sql.DB, error) {dsn : fmt.Sprintf(%s:%s/%s, cfg.DBUser, cfg.DBPassword, cfg.DBName)db, err : sql.Open(cfg.DBDriver, dsn)if err ! nil {return nil, fmt.Errorf(failed to connect to database: %v, err)}if err : db.Ping(); err ! nil {return nil, fmt.Errorf(failed to ping database: %v, err)}log.Println(Connected to database)return db, nil }2.3 models/acc_model.go 定义数据模型和数据库操作方法。 package modelsimport (database/sqllog )type AccountingRecord struct {Method string json:methodFromTag string json:from_tagToTag string json:to_tagCallID string json:callidSipCode string json:sip_codeSipReason string json:sip_reasonTime string json:timeUserAgent string json:uaUUID string json:uuid }func SaveRecord(db *sql.DB, record AccountingRecord) error {query : INSERT INTO acc_records (method, from_tag, to_tag, callid, sip_code, sip_reason, time, ua, uuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)_, err : db.Exec(query,record.Method,record.FromTag,record.ToTag,record.CallID,record.SipCode,record.SipReason,record.Time,record.UserAgent,record.UUID,)if err ! nil {log.Printf(Failed to save record: %v, err)return err}log.Printf(Saved record: %v, record)return nil }2.4 services/queue_service.go 从 Kamailio 消息队列中读取数据的服务。 package servicesimport (encoding/jsonkamailio-acc/modelslogtimegithub.com/zero-os/gorpc )type KamailioClient struct {client *gorpc.Client }func NewKamailioClient(addr string) *KamailioClient {return KamailioClient{client: gorpc.NewClient(tcp, addr),} }func (kc *KamailioClient) Close() {kc.client.Close() }func (kc *KamailioClient) ReadQueue(queueName string) ([]models.AccountingRecord, error) {var result map[string]interface{}if err : kc.client.Call(mq.read, queueName, result); err ! nil {return nil, err}messages, ok : result[messages].([]interface{})if !ok {return nil, nil}var records []models.AccountingRecordfor _, msg : range messages {msgJSON, err : json.Marshal(msg)if err ! nil {log.Printf(Failed to marshal message: %v, err)continue}var record models.AccountingRecordif err : json.Unmarshal(msgJSON, record); err ! nil {log.Printf(Failed to unmarshal message: %v, err)continue}records append(records, record)}return records, nil }func StartQueueListener(client *KamailioClient, db *sql.DB) {for {records, err : client.ReadQueue(acc_json_queue)if err ! nil {log.Printf(Failed to read from queue: %v, err)time.Sleep(5 * time.Second)continue}for _, record : range records {if err : models.SaveRecord(db, record); err ! nil {log.Printf(Failed to save record: %v, err)}}time.Sleep(1 * time.Second)} }2.5 handlers/acc_handler.go 定义 HTTP 路由和处理程序。 package handlersimport (database/sqlnet/httpgithub.com/gin-gonic/ginkamailio-acc/models )func RegisterRoutes(r *gin.Engine, db *sql.DB) {r.GET(/records, func(c *gin.Context) {// 示例从数据库中获取所有记录var records []models.AccountingRecordrows, err : db.Query(SELECT * FROM acc_records)if err ! nil {c.JSON(http.StatusInternalServerError, gin.H{error: err.Error()})return}defer rows.Close()for rows.Next() {var record models.AccountingRecordif err : rows.Scan(record.Method,record.FromTag,record.ToTag,record.CallID,record.SipCode,record.SipReason,record.Time,record.UserAgent,record.UUID,); err ! nil {c.JSON(http.StatusInternalServerError, gin.H{error: err.Error()})return}records append(records, record)}c.JSON(http.StatusOK, records)}) }3. 配置文件 .env SERVER_ADDR:8080 KAMAILIO_RPC_ADDR127.0.0.1:2049 DB_DRIVERmysql DB_USERroot DB_PASSWORDpassword DB_NAMEkamailio_acc4. 运行程序 启动 Kamailio确保 ACC_JSON 模块正常运行。运行 Go 程序go run main.go访问 http://localhost:8080/records查看数据库中的计费记录。 总结 通过 Gin 框架将 Kamailio 的计费信息处理逻辑组织成一个结构化的 Web 服务。Go 程序从 Kamailio 的消息队列中读取数据并写入数据库同时提供 HTTP 接口供外部系统查询数据。
http://www.w-s-a.com/news/466728/

相关文章:

  • 网站开发外包网站贵阳网站建设 网站制作
  • 官方微网站西安景观设计公司排行
  • 广州学做网站视频代做网站
  • 沈阳公司建站seo课程培训班
  • 杭州做微信网站软件公司网站建设毕业设计中期进度报告
  • 怎么做谷歌这样的网站如何建立一个网站放视频
  • 园区网站建设调研报告北京朝阳区哪里有网站开发
  • 网站角色权限wordpress 优化版
  • 购物网站ppt怎么做网络公司注册多少钱
  • 学做衣服上什么网站好贴吧高级搜索
  • 贵州 跨境电商网站建设做淘宝店铺有哪些好的网站
  • 广州正规网站制作公司网站搭建公司
  • ui设计零基础好学吗珠海网站建设优化推广
  • 网站开发多少费用火车头采集wordpress发布时间
  • 有没有做皮艺的网站教育培训网站建设ppt
  • 建设外贸商城网站制作如何建设景区旅游网站
  • 网站建设服务的具体条件怎么建设一个响应式网站
  • 做flash的网站wordpress设置前台投稿
  • 商务网站开发文档迅雷资源做下载网站
  • 无极磁铁网站如何把地图放到自己做的网站上
  • 青浦赵巷网站建设公司网站开发需求文档
  • 苏州网站建设的公司哪家好无锡网站制作那些
  • 装饰公司网站模板科技成果鉴定机构
  • 给公司做的东西放到私人网站上十堰为企业做网站的单位
  • 手机网站建设价钱手机自己做网站
  • 网站建设属于哪种公司电子商务查询网站
  • 工程建设标准强制性条文最新版本网站关键词排名优化应该怎么做
  • 网站网页设计内容品牌高端网站建设公司
  • 网站开发报价 福州中国建筑网官网手机版
  • 网站 图片 自动往右移专门做定制化的网站