Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
speech_nlu_parse
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Package Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵文静
speech_nlu_parse
Commits
dbfeba08
Commit
dbfeba08
authored
May 18, 2025
by
赵文静
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
补充新闻
parent
9e758097
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
103 additions
and
55 deletions
+103
-55
conf/config.yaml
conf/config.yaml
+5
-0
global/setting.go
global/setting.go
+1
-0
main.go
main.go
+14
-0
pkg/setting/section.go
pkg/setting/section.go
+6
-0
service/speechNlu/news.go
service/speechNlu/news.go
+3
-3
service/speechNlu/rabbitmq.go
service/speechNlu/rabbitmq.go
+74
-52
No files found.
conf/config.yaml
View file @
dbfeba08
...
@@ -8,6 +8,11 @@ Server:
...
@@ -8,6 +8,11 @@ Server:
Interval
:
10
#健康检查间隔,单位:秒
Interval
:
10
#健康检查间隔,单位:秒
Deregister
:
1
#注销时间,相当于过期时间,单位:分钟
Deregister
:
1
#注销时间,相当于过期时间,单位:分钟
RabbitMq
:
Url
:
amqp://iot:qwe!23@172.28.5.42:5672/voice
ExchangeName
:
voice.media.ctrl
ExchangeType
:
direct
Logger
:
Logger
:
LogFileName
:
tencent-nlu-parse
LogFileName
:
tencent-nlu-parse
LogFileExt
:
.log
LogFileExt
:
.log
...
...
global/setting.go
View file @
dbfeba08
...
@@ -21,4 +21,5 @@ var (
...
@@ -21,4 +21,5 @@ var (
ConsulObj
*
consul
.
ConsulObj
ConsulObj
*
consul
.
ConsulObj
TencentGwSetting
*
setting
.
TencentGwSetting
TencentGwSetting
*
setting
.
TencentGwSetting
SpeechSetting
*
setting
.
SpeechSettings
SpeechSetting
*
setting
.
SpeechSettings
RabbitMqSetting
*
setting
.
RabbitMqSettings
)
)
main.go
View file @
dbfeba08
...
@@ -8,6 +8,7 @@ import (
...
@@ -8,6 +8,7 @@ import (
"net"
"net"
"net/url"
"net/url"
"runtime"
"runtime"
"speech-nlu-parse/service/speechNlu"
"strings"
"strings"
"time"
"time"
...
@@ -117,6 +118,15 @@ func main() {
...
@@ -117,6 +118,15 @@ func main() {
if
err
=
server
.
Serve
(
lis
);
err
!=
nil
{
if
err
=
server
.
Serve
(
lis
);
err
!=
nil
{
log
.
Fatalf
(
"start service error:%v"
,
err
)
log
.
Fatalf
(
"start service error:%v"
,
err
)
}
}
c
,
err
:=
speechNlu
.
NewConsumer
(
global
.
RabbitMqSetting
.
Url
,
global
.
RabbitMqSetting
.
ExchangeName
,
global
.
RabbitMqSetting
.
ExchangeType
)
if
err
!=
nil
{
log
.
Fatalf
(
"%s"
,
err
)
}
if
err
:=
c
.
Shutdown
();
err
!=
nil
{
log
.
Printf
(
"error during shutdown: %s"
,
err
)
}
}
}
func
setupFlag
()
error
{
func
setupFlag
()
error
{
...
@@ -195,6 +205,10 @@ func setupSetting() error {
...
@@ -195,6 +205,10 @@ func setupSetting() error {
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
err
=
s
.
ReadSection
(
"RabbitMq"
,
&
global
.
RabbitMqSetting
)
if
err
!=
nil
{
return
err
}
consulUrlParse
,
err
:=
url
.
Parse
(
consulUrl
)
consulUrlParse
,
err
:=
url
.
Parse
(
consulUrl
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
pkg/setting/section.go
View file @
dbfeba08
...
@@ -96,6 +96,12 @@ type SpeechSettings struct {
...
@@ -96,6 +96,12 @@ type SpeechSettings struct {
Url
string
Url
string
}
}
type
RabbitMqSettings
struct
{
Url
string
ExchangeName
string
ExchangeType
string
}
func
(
s
*
Setting
)
ReadSection
(
k
string
,
v
interface
{})
error
{
func
(
s
*
Setting
)
ReadSection
(
k
string
,
v
interface
{})
error
{
return
s
.
vp
.
UnmarshalKey
(
k
,
v
)
return
s
.
vp
.
UnmarshalKey
(
k
,
v
)
}
}
service/speechNlu/news.go
View file @
dbfeba08
...
@@ -37,7 +37,7 @@ type FeedBackResp struct {
...
@@ -37,7 +37,7 @@ type FeedBackResp struct {
Source
string
`json:"source"`
Source
string
`json:"source"`
}
}
func
FeedBackNews
(
actionType
int
,
ip
string
)
(
*
FeedBackResp
,
error
)
{
func
FeedBackNews
(
actionType
,
duration
int
,
ip
,
sid
string
)
(
*
FeedBackResp
,
error
)
{
url
:=
"http://apis.duiopen.com/feedback/letingv4?productId=279629895&apikey=0c74988953dd4ed4bf31955527802cf3&uid=111"
url
:=
"http://apis.duiopen.com/feedback/letingv4?productId=279629895&apikey=0c74988953dd4ed4bf31955527802cf3&uid=111"
request
:=
FeedBackReq
{
request
:=
FeedBackReq
{
ActionType
:
actionType
,
ActionType
:
actionType
,
...
@@ -46,8 +46,8 @@ func FeedBackNews(actionType int, ip string) (*FeedBackResp, error) {
...
@@ -46,8 +46,8 @@ func FeedBackNews(actionType int, ip string) (*FeedBackResp, error) {
Brand
:
"gree"
,
Brand
:
"gree"
,
Data
:
[]
map
[
string
]
interface
{}{
Data
:
[]
map
[
string
]
interface
{}{
{
{
"sid"
:
"m6J2LW-4z-H2dtxea5Sv6_voziweppX1K_aGb7fKtdjq3y36awwXd_NeoKgBXD7a"
,
"sid"
:
sid
,
//"m6J2LW-4z-H2dtxea5Sv6_voziweppX1K_aGb7fKtdjq3y36awwXd_NeoKgBXD7a"
"duration"
:
138
,
"duration"
:
duration
,
//138
},
},
},
},
}
}
...
...
service/speechNlu/rabbitmq.go
View file @
dbfeba08
package
speechNlu
package
speechNlu
import
(
import
(
"encoding/json"
"fmt"
"fmt"
"log"
"log"
"speech-nlu-parse/global"
"speech-nlu-parse/global"
"speech-nlu-parse/pkg/logger"
"time"
"time"
amqp
"github.com/rabbitmq/amqp091-go"
amqp
"github.com/rabbitmq/amqp091-go"
...
@@ -16,31 +18,6 @@ type Consumer struct {
...
@@ -16,31 +18,6 @@ type Consumer struct {
done
chan
error
done
chan
error
}
}
//func New(amqpURI string) (Consumer, error) {
// //mq链接
// log.Printf("dialing %q", amqpURI)
// conn, err := amqp.Dial(amqpURI)
// if err != nil {
// global.Logger.Errorf("Dial: %s", err)
// consumerErr++
// return Consumer{}, err
// }
//
// log.Printf("got Connection, getting Channel")
// //创建一个rabbitmq信道
// channel, err := conn.Channel()
// if err != nil {
// return Consumer{}, err
// }
//
// defer channel.Close()
// return Consumer{
// conn: conn,
// channel: channel,
// done: make(chan error),
// }, err
//}
func
failOnError
(
err
error
,
msg
string
)
{
func
failOnError
(
err
error
,
msg
string
)
{
if
err
!=
nil
{
if
err
!=
nil
{
global
.
Logger
.
Errorf
(
"%s: %s"
,
msg
,
err
)
global
.
Logger
.
Errorf
(
"%s: %s"
,
msg
,
err
)
...
@@ -92,40 +69,25 @@ func NewConsumer(amqpURI, exchangeName, exchangeType string) (*Consumer, error)
...
@@ -92,40 +69,25 @@ func NewConsumer(amqpURI, exchangeName, exchangeType string) (*Consumer, error)
return
nil
,
err
return
nil
,
err
}
}
// 声明发布消息的交换机
queue
:=
"news"
err
=
c
.
exchangeDeclare
(
global
.
PublishSetting
.
ExchangeName
,
global
.
PublishSetting
.
ExchangeType
)
routingKey
:=
"news"
if
err
!=
nil
{
global
.
Logger
.
Errorf
(
"Failed to declare exchange: %s"
,
err
)
return
nil
,
err
}
// 定义队列和路由键绑定
type
bind
struct
{
queue
string
routingKey
string
}
bindings
:=
[]
bind
{
{
"news"
,
"grih.HOME_MAC"
},
}
// 声明队列并绑定
// 声明队列并绑定
for
_
,
b
:=
range
bindings
{
log
.
Printf
(
"declared Exchange, declaring Queue %q"
,
queue
)
log
.
Printf
(
"declared Exchange, declaring Queue %q"
,
b
.
queue
)
err
=
c
.
queueDeclare
(
queue
)
err
=
c
.
queueDeclare
(
b
.
queue
)
if
err
!=
nil
{
if
err
!=
nil
{
global
.
Logger
.
Errorf
(
"Failed to declare queue %s: %s"
,
b
.
queue
,
err
)
global
.
Logger
.
Errorf
(
"Failed to declare queue %s: %s"
,
queue
,
err
)
return
nil
,
err
return
nil
,
err
}
}
err
=
c
.
channel
.
QueueBind
(
b
.
queue
,
b
.
routingKey
,
exchangeName
,
false
,
nil
)
err
=
c
.
channel
.
QueueBind
(
queue
,
routingKey
,
exchangeName
,
false
,
nil
)
if
err
!=
nil
{
if
err
!=
nil
{
global
.
Logger
.
Errorf
(
"Failed to bind queue %s: %s"
,
b
.
queue
,
err
)
global
.
Logger
.
Errorf
(
"Failed to bind queue %s: %s"
,
queue
,
err
)
return
nil
,
err
return
nil
,
err
}
}
}
// 设置 QoS
// 设置 QoS
err
=
c
.
channel
.
Qos
(
25
0
,
0
,
false
)
err
=
c
.
channel
.
Qos
(
1
0
,
0
,
false
)
if
err
!=
nil
{
if
err
!=
nil
{
global
.
Logger
.
Errorf
(
"Failed to set QoS: %s"
,
err
)
global
.
Logger
.
Errorf
(
"Failed to set QoS: %s"
,
err
)
return
nil
,
err
return
nil
,
err
...
@@ -194,3 +156,63 @@ func (c *Consumer) Shutdown() error {
...
@@ -194,3 +156,63 @@ func (c *Consumer) Shutdown() error {
// wait for handle() to exit
// wait for handle() to exit
return
<-
c
.
done
return
<-
c
.
done
}
}
type
ReData
struct
{
Cols
[]
string
`json:"cols"`
Dat
[]
interface
{}
`json:"dat"`
}
func
(
c
*
Consumer
)
Consume
()
{
msgs
,
err
:=
c
.
channel
.
Consume
(
"news"
,
""
,
false
,
false
,
false
,
false
,
nil
)
failOnError
(
err
,
"Failed to register a consumer"
)
for
d
:=
range
msgs
{
resp
:=
ReData
{}
err
:=
json
.
Unmarshal
(
d
.
Body
,
&
resp
)
if
err
!=
nil
{
global
.
Logger
.
WithFields
(
logger
.
Fields
{
"requestId"
:
requestId
})
.
Errorf
(
"subdev json.Unmarshal error: %v"
,
err
)
d
.
Nack
(
false
,
true
)
break
}
global
.
Logger
.
WithFields
(
logger
.
Fields
{
"requestId"
:
requestId
,
"RoutingKey"
:
d
.
RoutingKey
,
"Body"
:
fmt
.
Sprintf
(
"%s"
,
d
.
Body
),
"re"
:
re
,
})
.
Info
(
"news"
)
// 初始化变量
var
(
state
,
offset
int
mediaId
,
ip
string
)
//todo:还需要判断domain
// 遍历 cols 找到索引并取值
for
i
,
col
:=
range
resp
.
Cols
{
switch
col
{
case
"state"
:
if
val
,
ok
:=
resp
.
Dat
[
i
]
.
(
float64
);
ok
{
state
=
int
(
val
)
}
case
"mediaId"
:
if
val
,
ok
:=
resp
.
Dat
[
i
]
.
(
string
);
ok
{
mediaId
=
val
}
case
"offset"
:
if
val
,
ok
:=
resp
.
Dat
[
i
]
.
(
float64
);
ok
{
offset
=
int
(
val
)
}
}
//todo:还需要ip和mac
feedBack
,
err
:=
FeedBackNews
(
state
,
offset
,
ip
,
mediaId
)
failOnError
(
err
,
"FeedBackNews err"
)
if
feedBack
.
Code
!=
0
{
d
.
Nack
(
false
,
true
)
break
}
d
.
Ack
(
false
)
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment