diff --git a/components/delay_queue/interface_generated.go b/components/delay_queue/interface_generated.go
new file mode 100644
index 0000000000..9d88794458
--- /dev/null
+++ b/components/delay_queue/interface_generated.go
@@ -0,0 +1,24 @@
+// Code generated by github.com/seeflood/protoc-gen-p6 .
+
+// Copyright 2021 Layotto Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package delay_queue
+
+import (
+ context "context"
+)
+
+type DelayQueue interface {
+ PublishDelayMessage(context.Context, *DelayMessageRequest) (*DelayMessageResponse, error)
+}
diff --git a/components/delay_queue/struct_generated.go b/components/delay_queue/struct_generated.go
new file mode 100644
index 0000000000..7923049583
--- /dev/null
+++ b/components/delay_queue/struct_generated.go
@@ -0,0 +1,42 @@
+// Code generated by github.com/seeflood/protoc-gen-p6 .
+
+// Copyright 2021 Layotto Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package delay_queue
+
+// DelayMessageRequest is the message to publish
+type DelayMessageRequest struct {
+ // Required. The name of the DelayQueue component
+ ComponentName string `json:"component_name,omitempty"`
+ // Required. The pubsub topic
+ Topic string `json:"topic,omitempty"`
+ // Required. The data which will be published to topic.
+ Data []byte `json:"data,omitempty"`
+ // The content type for the data (optional).
+ DataContentType string `json:"data_content_type,omitempty"`
+ // The length of time, in seconds, for which the delivery
+ // of this messages is delayed. Default: 0.
+ DelayInSeconds int32 `json:"delay_in_seconds,omitempty"`
+ // The metadata passing to pub components
+ //
+ // metadata property:
+ // - key : the key of the message.
+ Metadata map[string]string `json:"metadata,omitempty"`
+}
+
+// DelayMessageResponse is the response
+type DelayMessageResponse struct {
+ // The message identifier
+ MessageId string `json:"message_id,omitempty"`
+}
diff --git a/docs/_sidebar.md b/docs/_sidebar.md
index e4846536d9..57151d4cb1 100644
--- a/docs/_sidebar.md
+++ b/docs/_sidebar.md
@@ -16,6 +16,7 @@
- [Use OSS API](en/start/oss/start.md)
- [API plugin: register your own API](en/start/api_plugin/helloworld.md)
+ - [Use delay_queue API](en/start/delay_queue/start)
- [(Under construction) Use phone API](en/start/phone/start)
- [(Under construction) Use email API](en/start/email/start)
- [Use lifecycle API](en/start/lifecycle/start)
diff --git a/docs/api/v1/delay_queue.html b/docs/api/v1/delay_queue.html
new file mode 100644
index 0000000000..54b3debfc8
--- /dev/null
+++ b/docs/api/v1/delay_queue.html
@@ -0,0 +1,553 @@
+
+
+
+
+ Protocol Documentation
+
+
+
+
+
+
+
+
+
+
+ Protocol Documentation
+
+ Table of Contents
+
+
+
+
+
+
+
+
+
+ [gRPC Service] DelayQueue
+ DelayQueue is a special kind of message queue, which lets you postpone the delivery of new messages to consumers.
+
+
+
+
+
+ DelayMessageRequest
+ DelayMessageRequest is the message to publish
+
+
+
+
+ Field Type Label Description
+
+
+
+
+ component_name
+ string
+
+ Required. The name of the DelayQueue component
+
+
+
+ topic
+ string
+
+ Required. The pubsub topic
+
+
+
+ data
+ bytes
+
+ Required. The data which will be published to topic.
+
+
+
+ data_content_type
+ string
+
+ The content type for the data (optional).
+
+
+
+ delay_in_seconds
+ int32
+
+ The length of time, in seconds, for which the delivery
+of this messages is delayed. Default: 0.
+
+
+
+ metadata
+ DelayMessageRequest.MetadataEntry
+ repeated
+ The metadata passing to pub components
+
+metadata property:
+- key : the key of the message.
+
+
+
+
+
+
+
+
+
+ DelayMessageRequest.MetadataEntry
+
+
+
+
+
+ Field Type Label Description
+
+
+
+
+ key
+ string
+
+
+
+
+
+ value
+ string
+
+
+
+
+
+
+
+
+
+
+
+ DelayMessageResponse
+ DelayMessageResponse is the response
+
+
+
+
+ Field Type Label Description
+
+
+
+
+ message_id
+ string
+
+ The message identifier
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Scalar Value Types
+
+
+ .proto Type Notes C++ Java Python Go C# PHP Ruby
+
+
+
+
+ double
+
+ double
+ double
+ float
+ float64
+ double
+ float
+ Float
+
+
+
+ float
+
+ float
+ float
+ float
+ float32
+ float
+ float
+ Float
+
+
+
+ int32
+ Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.
+ int32
+ int
+ int
+ int32
+ int
+ integer
+ Bignum or Fixnum (as required)
+
+
+
+ int64
+ Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.
+ int64
+ long
+ int/long
+ int64
+ long
+ integer/string
+ Bignum
+
+
+
+ uint32
+ Uses variable-length encoding.
+ uint32
+ int
+ int/long
+ uint32
+ uint
+ integer
+ Bignum or Fixnum (as required)
+
+
+
+ uint64
+ Uses variable-length encoding.
+ uint64
+ long
+ int/long
+ uint64
+ ulong
+ integer/string
+ Bignum or Fixnum (as required)
+
+
+
+ sint32
+ Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.
+ int32
+ int
+ int
+ int32
+ int
+ integer
+ Bignum or Fixnum (as required)
+
+
+
+ sint64
+ Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s.
+ int64
+ long
+ int/long
+ int64
+ long
+ integer/string
+ Bignum
+
+
+
+ fixed32
+ Always four bytes. More efficient than uint32 if values are often greater than 2^28.
+ uint32
+ int
+ int
+ uint32
+ uint
+ integer
+ Bignum or Fixnum (as required)
+
+
+
+ fixed64
+ Always eight bytes. More efficient than uint64 if values are often greater than 2^56.
+ uint64
+ long
+ int/long
+ uint64
+ ulong
+ integer/string
+ Bignum
+
+
+
+ sfixed32
+ Always four bytes.
+ int32
+ int
+ int
+ int32
+ int
+ integer
+ Bignum or Fixnum (as required)
+
+
+
+ sfixed64
+ Always eight bytes.
+ int64
+ long
+ int/long
+ int64
+ long
+ integer/string
+ Bignum
+
+
+
+ bool
+
+ bool
+ boolean
+ boolean
+ bool
+ bool
+ boolean
+ TrueClass/FalseClass
+
+
+
+ string
+ A string must always contain UTF-8 encoded or 7-bit ASCII text.
+ string
+ String
+ str/unicode
+ string
+ string
+ string
+ String (UTF-8)
+
+
+
+ bytes
+ May contain any arbitrary sequence of bytes.
+ string
+ ByteString
+ str
+ []byte
+ ByteString
+ string
+ String (ASCII-8BIT)
+
+
+
+
+
+
diff --git a/docs/en/api_reference/README.md b/docs/en/api_reference/README.md
index 0731db1cef..4ec8a8284a 100644
--- a/docs/en/api_reference/README.md
+++ b/docs/en/api_reference/README.md
@@ -13,6 +13,10 @@ In addition to this, Layotto also provides some extension APIs, including:
+
+
+delay_queue: [spec/proto/extension/v1/delay_queue](https://mosn.io/layotto/api/v1/delay_queue.html)
+
email: [spec/proto/extension/v1/email](https://mosn.io/layotto/api/v1/email.html)
phone: [spec/proto/extension/v1/phone](https://mosn.io/layotto/api/v1/phone.html)
diff --git a/docs/en/start/delay_queue/start.md b/docs/en/start/delay_queue/start.md
new file mode 100644
index 0000000000..f7ce1bdd58
--- /dev/null
+++ b/docs/en/start/delay_queue/start.md
@@ -0,0 +1,122 @@
+
+# DelayQueue API demo
+
+This example shows how to invoke Layotto DelayQueue API.
+
+DelayQueue is a special kind of message queue, which lets you postpone the delivery of new messages to consumers.
+
+## step 1. Deploy Layotto
+
+### **With Docker**
+You can start Layotto with docker
+
+```bash
+docker run -v "$(pwd)/configs/config_standalone.json:/runtime/configs/config.json" -d -p 34904:34904 --name layotto layotto/layotto start
+```
+
+### **Compile locally (not for Windows)**
+You can compile and run Layotto locally.
+
+> [!TIP|label: Not for Windows users]
+> Layotto fails to compile under Windows. Windows users are recommended to deploy using docker
+
+After downloading the project code to the local, switch the code directory and compile:
+
+```shell
+cd ${project_path}/cmd/layotto
+```
+
+```shell @if.not.exist layotto
+go build
+```
+
+Once finished, the layotto binary will be generated in the directory.
+
+Run it:
+
+```shell @background
+./layotto start -c ../../configs/config_standalone.json
+```
+
+
+
+## step 2. Run the client program to invoke Layotto DelayQueue API
+
+### **Go**
+Build and run the golang demo:
+
+```shell
+ cd ${project_path}/demo/delay_queue/common/
+ go build -o client
+ ./client -s "demo"
+```
+
+If the following information is printed, the demo is successful:
+
+```bash
+TODO
+```
+
+### **Java**
+
+Download java sdk and examples:
+
+```shell @if.not.exist java-sdk
+git clone https://github.com/layotto/java-sdk
+```
+
+```shell
+cd java-sdk
+```
+
+Build the demo:
+
+```shell @if.not.exist examples-delay_queue/target/examples-delay_queue-1.1.0-jar-with-dependencies.jar
+# build example jar
+mvn -f examples-delay_queue/pom.xml clean package
+```
+
+Run it:
+
+```shell
+java -jar examples-delay_queue/target/examples-delay_queue-1.1.0-jar-with-dependencies.jar
+```
+
+If the following information is printed, the demo is successful:
+
+```bash
+TODO
+```
+
+
+
+## step 3. Stop containers and release resources
+
+### **Destroy the Docker container**
+If you started Layotto with docker, you can destroy the container as follows:
+
+```bash
+docker rm -f layotto
+```
+
+
+
+## Next step
+### What does this client program do?
+The demo client program uses the SDK provided by Layotto to invoke the Layotto DelayQueue API.
+
+The golang sdk is located in the `sdk` directory, and the java sdk is in https://github.com/layotto/java-sdk
+
+In addition to using sdk, you can also interact with Layotto directly through grpc in any language you like.
+
+### Details later, let's continue to experience other APIs
+Explore other Quickstarts through the navigation bar on the left.
+
+### Reference
+
+[API Reference](https://mosn.io/layotto/api/v1/delay_queue.html)
+
+
+
+
+
diff --git a/docs/zh/_sidebar.md b/docs/zh/_sidebar.md
index dd66665be1..1168fe1764 100644
--- a/docs/zh/_sidebar.md
+++ b/docs/zh/_sidebar.md
@@ -17,6 +17,7 @@
- [基于Minio](zh/start/file/minio.md)
- [使用 OSS API](zh/start/oss/oss.md)
+ - [使用 delay_queue API](zh/start/delay_queue/start)
- [(建设中)使用 phone API](zh/start/phone/start)
- [(建设中)使用 email API](zh/start/email/start)
- [使用 lifecycle API](zh/start/lifecycle/start)
diff --git a/docs/zh/api_reference/README.md b/docs/zh/api_reference/README.md
index f0c3815cf3..a2a95e91f7 100644
--- a/docs/zh/api_reference/README.md
+++ b/docs/zh/api_reference/README.md
@@ -13,6 +13,10 @@ Layotto 有多个 gRPC proto 文件, 对应的接口文档在:
+
+
+delay_queue: [spec/proto/extension/v1/delay_queue](https://mosn.io/layotto/api/v1/delay_queue.html)
+
email: [spec/proto/extension/v1/email](https://mosn.io/layotto/api/v1/email.html)
phone: [spec/proto/extension/v1/phone](https://mosn.io/layotto/api/v1/phone.html)
diff --git a/docs/zh/start/delay_queue/start.md b/docs/zh/start/delay_queue/start.md
new file mode 100644
index 0000000000..b67211fbca
--- /dev/null
+++ b/docs/zh/start/delay_queue/start.md
@@ -0,0 +1,122 @@
+
+# DelayQueue API demo
+
+本示例演示如何调用 Layotto DelayQueue API.
+
+DelayQueue is a special kind of message queue, which lets you postpone the delivery of new messages to consumers.
+
+## step 1. 运行 Layotto
+
+### **With Docker**
+您可以用 Docker 启动 Layotto
+
+```bash
+docker run -v "$(pwd)/configs/config_standalone.json:/runtime/configs/config.json" -d -p 34904:34904 --name layotto layotto/layotto start
+```
+
+### **本地编译(不适合 Windows)**
+您可以本地编译、运行 Layotto。
+> [!TIP|label: 不适合 Windows 用户]
+> Layotto 在 Windows 下会编译失败。建议 Windows 用户使用 docker 部署
+
+将项目代码下载到本地后,切换代码目录:
+
+```shell
+cd ${project_path}/cmd/layotto
+```
+
+构建:
+
+```shell @if.not.exist layotto
+go build
+```
+
+完成后目录下会生成 Layotto文件,运行它:
+
+```shell @background
+./layotto start -c ../../configs/config_standalone.json
+```
+
+
+
+## step 2. 运行客户端程序,调用 Layotto DelayQueue API
+
+### **Go**
+
+构建、运行 go 语言 demo:
+
+```shell
+ cd ${project_path}/demo/delay_queue/common/
+ go build -o client
+ ./client -s "demo"
+```
+
+打印出如下信息则代表调用成功:
+
+```bash
+TODO
+```
+
+### **Java**
+
+下载 java sdk 和示例代码:
+
+```shell @if.not.exist java-sdk
+git clone https://github.com/layotto/java-sdk
+```
+
+```shell
+cd java-sdk
+```
+
+构建 examples:
+
+```shell @if.not.exist examples-delay_queue/target/examples-delay_queue-1.1.0-jar-with-dependencies.jar
+# build example jar
+mvn -f examples-delay_queue/pom.xml clean package
+```
+
+运行:
+
+```shell
+java -jar examples-delay_queue/target/examples-delay_queue-1.1.0-jar-with-dependencies.jar
+```
+
+打印出以下信息说明运行成功:
+
+```bash
+TODO
+```
+
+
+
+## step 3. 销毁容器,释放资源
+
+### **销毁 Docker container**
+如果您是用 Docker 启动的 Layotto,可以按以下方式销毁容器:
+
+```bash
+docker rm -f layotto
+```
+
+
+
+## 下一步
+### 这个客户端程序做了什么?
+示例客户端程序中使用了 Layotto 提供的多语言 sdk,调用Layotto DelayQueue API。
+
+go sdk位于`sdk`目录下,java sdk 在 https://github.com/layotto/java-sdk
+
+除了使用sdk调用Layotto提供的API,您也可以用任何您喜欢的语言、通过grpc直接和Layotto交互。
+
+### 细节以后再说,继续体验其他API
+通过左侧的导航栏,继续体验别的API吧!
+
+### Reference
+
+[API Reference](https://mosn.io/layotto/api/v1/delay_queue.html)
+
+
+
+
+
diff --git a/pkg/grpc/delay_queue/server.go b/pkg/grpc/delay_queue/server.go
new file mode 100644
index 0000000000..f21a3242e2
--- /dev/null
+++ b/pkg/grpc/delay_queue/server.go
@@ -0,0 +1,107 @@
+// Code generated by github.com/seeflood/protoc-gen-p6. DO NOT EDIT.
+
+// Copyright 2021 Layotto Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package delay_queue
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+
+ "mosn.io/pkg/log"
+
+ delay_queue "mosn.io/layotto/components/delay_queue"
+ delay_queue1 "mosn.io/layotto/spec/proto/extension/v1/delay_queue"
+
+ rawGRPC "google.golang.org/grpc"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
+
+ grpc_api "mosn.io/layotto/pkg/grpc"
+)
+
+func NewAPI(ac *grpc_api.ApplicationContext) grpc_api.GrpcAPI {
+ result := &server{
+ appId: ac.AppId,
+ components: make(map[string]delay_queue.DelayQueue),
+ }
+
+ for k, v := range ac.PubSubs {
+ comp, ok := v.(delay_queue.DelayQueue)
+ if !ok {
+ continue
+ }
+ // put it in the components map
+ result.components[k] = comp
+ }
+ return result
+}
+
+type server struct {
+ appId string
+ components map[string]delay_queue.DelayQueue
+}
+
+func (s *server) PublishDelayMessage(ctx context.Context, in *delay_queue1.DelayMessageRequest) (*delay_queue1.DelayMessageResponse, error) {
+ // find the component
+ comp := s.components[in.ComponentName]
+ if comp == nil {
+ return nil, invalidArgumentError("PublishDelayMessage", grpc_api.ErrComponentNotFound, "delay_queue1", in.ComponentName)
+ }
+
+ // convert request
+ var req delay_queue.DelayMessageRequest
+ bytes, err := json.Marshal(in)
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "Error when json.Marshal the request: %s", err.Error())
+ }
+ err = json.Unmarshal(bytes, &req)
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "Error when json.Unmarshal the request: %s", err.Error())
+ }
+
+ // delegate to the component
+ resp, err := comp.PublishDelayMessage(ctx, &req)
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, err.Error())
+ }
+
+ // convert response
+ var out delay_queue1.DelayMessageResponse
+ bytes, err = json.Marshal(resp)
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "Error when json.Marshal the response: %s", err.Error())
+ }
+ err = json.Unmarshal(bytes, &out)
+ if err != nil {
+ return nil, status.Errorf(codes.Internal, "Error when json.Unmarshal the response: %s", err.Error())
+ }
+ return &out, nil
+}
+
+func invalidArgumentError(method string, format string, a ...interface{}) error {
+ err := status.Errorf(codes.InvalidArgument, format, a...)
+ log.DefaultLogger.Errorf(fmt.Sprintf("%s fail: %+v", method, err))
+ return err
+}
+
+func (s *server) Init(conn *rawGRPC.ClientConn) error {
+ return nil
+}
+
+func (s *server) Register(rawGrpcServer *rawGRPC.Server) error {
+ delay_queue1.RegisterDelayQueueServer(rawGrpcServer, s)
+ return nil
+}
diff --git a/pkg/runtime/extension_api_generated.go b/pkg/runtime/extension_api_generated.go
new file mode 100644
index 0000000000..af9fe0e308
--- /dev/null
+++ b/pkg/runtime/extension_api_generated.go
@@ -0,0 +1,32 @@
+// Code generated by github.com/seeflood/protoc-gen-p6 .
+
+// Copyright 2021 Layotto Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package runtime
+
+import (
+ delay_queue "mosn.io/layotto/pkg/grpc/delay_queue"
+ email "mosn.io/layotto/pkg/grpc/email"
+ s3 "mosn.io/layotto/pkg/grpc/extension/s3"
+ phone "mosn.io/layotto/pkg/grpc/phone"
+)
+
+func WithExtensionGrpcAPI() Option {
+ return WithGrpcAPI(
+ s3.NewS3Server,
+ delay_queue.NewAPI,
+ email.NewAPI,
+ phone.NewAPI,
+ )
+}
diff --git a/pkg/runtime/options_generated.go b/pkg/runtime/options_generated.go
index df973bd898..4070d4c1e1 100644
--- a/pkg/runtime/options_generated.go
+++ b/pkg/runtime/options_generated.go
@@ -18,9 +18,6 @@ package runtime
import (
email "mosn.io/layotto/components/email"
phone "mosn.io/layotto/components/phone"
- email1 "mosn.io/layotto/pkg/grpc/email"
- s3 "mosn.io/layotto/pkg/grpc/extension/s3"
- phone1 "mosn.io/layotto/pkg/grpc/phone"
)
type extensionComponentFactorys struct {
@@ -44,11 +41,3 @@ func WithPhoneCallServiceFactory(phone ...*phone.Factory) Option {
o.services.phone = append(o.services.phone, phone...)
}
}
-
-func WithExtensionGrpcAPI() Option {
- return WithGrpcAPI(
- s3.NewS3Server,
- email1.NewAPI,
- phone1.NewAPI,
- )
-}
diff --git a/sdk/go-sdk/client/client_generated.go b/sdk/go-sdk/client/client_generated.go
index 0524c93e04..831b9283c3 100644
--- a/sdk/go-sdk/client/client_generated.go
+++ b/sdk/go-sdk/client/client_generated.go
@@ -20,6 +20,7 @@ import (
grpc "google.golang.org/grpc"
+ delay_queue "mosn.io/layotto/spec/proto/extension/v1/delay_queue"
email "mosn.io/layotto/spec/proto/extension/v1/email"
phone "mosn.io/layotto/spec/proto/extension/v1/phone"
s3 "mosn.io/layotto/spec/proto/extension/v1/s3"
@@ -35,6 +36,9 @@ type Client interface {
s3.ObjectStorageServiceClient
+ // "mosn.io/layotto/spec/proto/extension/v1/delay_queue"
+ delay_queue.DelayQueueClient
+
// "mosn.io/layotto/spec/proto/extension/v1/email"
email.EmailServiceClient
@@ -48,6 +52,9 @@ func NewClientWithConnection(conn *grpc.ClientConn) Client {
connection: conn,
protoClient: v1.NewRuntimeClient(conn),
ObjectStorageServiceClient: s3.NewObjectStorageServiceClient(conn),
+ // "mosn.io/layotto/spec/proto/extension/v1/delay_queue"
+ DelayQueueClient: delay_queue.NewDelayQueueClient(conn),
+
// "mosn.io/layotto/spec/proto/extension/v1/email"
EmailServiceClient: email.NewEmailServiceClient(conn),
@@ -61,6 +68,8 @@ type GRPCClient struct {
connection *grpc.ClientConn
protoClient v1.RuntimeClient
s3.ObjectStorageServiceClient
+ // "mosn.io/layotto/spec/proto/extension/v1/delay_queue"
+ delay_queue.DelayQueueClient
// "mosn.io/layotto/spec/proto/extension/v1/email"
email.EmailServiceClient
// "mosn.io/layotto/spec/proto/extension/v1/phone"
diff --git a/spec/proto/extension/v1/delay_queue/delay_queue.pb.go b/spec/proto/extension/v1/delay_queue/delay_queue.pb.go
new file mode 100644
index 0000000000..36d2323321
--- /dev/null
+++ b/spec/proto/extension/v1/delay_queue/delay_queue.pb.go
@@ -0,0 +1,300 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.26.0
+// protoc v3.14.0
+// source: spec/proto/extension/v1/delay_queue/delay_queue.proto
+
+package delay_queue
+
+import (
+ reflect "reflect"
+ sync "sync"
+
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// DelayMessageRequest is the message to publish
+type DelayMessageRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // Required. The name of the DelayQueue component
+ ComponentName string `protobuf:"bytes,1,opt,name=component_name,json=componentName,proto3" json:"component_name,omitempty"`
+ // Required. The pubsub topic
+ Topic string `protobuf:"bytes,2,opt,name=topic,proto3" json:"topic,omitempty"`
+ // Required. The data which will be published to topic.
+ Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
+ // The content type for the data (optional).
+ DataContentType string `protobuf:"bytes,4,opt,name=data_content_type,json=dataContentType,proto3" json:"data_content_type,omitempty"`
+ // The length of time, in seconds, for which the delivery
+ // of this messages is delayed. Default: 0.
+ DelayInSeconds int32 `protobuf:"varint,5,opt,name=delay_in_seconds,json=delayInSeconds,proto3" json:"delay_in_seconds,omitempty"`
+ // The metadata passing to pub components
+ //
+ // metadata property:
+ // - key : the key of the message.
+ Metadata map[string]string `protobuf:"bytes,6,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *DelayMessageRequest) Reset() {
+ *x = DelayMessageRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_spec_proto_extension_v1_delay_queue_delay_queue_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DelayMessageRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DelayMessageRequest) ProtoMessage() {}
+
+func (x *DelayMessageRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_spec_proto_extension_v1_delay_queue_delay_queue_proto_msgTypes[0]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DelayMessageRequest.ProtoReflect.Descriptor instead.
+func (*DelayMessageRequest) Descriptor() ([]byte, []int) {
+ return file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *DelayMessageRequest) GetComponentName() string {
+ if x != nil {
+ return x.ComponentName
+ }
+ return ""
+}
+
+func (x *DelayMessageRequest) GetTopic() string {
+ if x != nil {
+ return x.Topic
+ }
+ return ""
+}
+
+func (x *DelayMessageRequest) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+func (x *DelayMessageRequest) GetDataContentType() string {
+ if x != nil {
+ return x.DataContentType
+ }
+ return ""
+}
+
+func (x *DelayMessageRequest) GetDelayInSeconds() int32 {
+ if x != nil {
+ return x.DelayInSeconds
+ }
+ return 0
+}
+
+func (x *DelayMessageRequest) GetMetadata() map[string]string {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+// DelayMessageResponse is the response
+type DelayMessageResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // The message identifier
+ MessageId string `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"`
+}
+
+func (x *DelayMessageResponse) Reset() {
+ *x = DelayMessageResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_spec_proto_extension_v1_delay_queue_delay_queue_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *DelayMessageResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DelayMessageResponse) ProtoMessage() {}
+
+func (x *DelayMessageResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_spec_proto_extension_v1_delay_queue_delay_queue_proto_msgTypes[1]
+ if protoimpl.UnsafeEnabled && x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DelayMessageResponse.ProtoReflect.Descriptor instead.
+func (*DelayMessageResponse) Descriptor() ([]byte, []int) {
+ return file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *DelayMessageResponse) GetMessageId() string {
+ if x != nil {
+ return x.MessageId
+ }
+ return ""
+}
+
+var File_spec_proto_extension_v1_delay_queue_delay_queue_proto protoreflect.FileDescriptor
+
+var file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDesc = []byte{
+ 0x0a, 0x35, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x78, 0x74,
+ 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f,
+ 0x71, 0x75, 0x65, 0x75, 0x65, 0x2f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x71, 0x75, 0x65, 0x75,
+ 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x23, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31,
+ 0x2e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x22, 0xdd, 0x02, 0x0a,
+ 0x13, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e,
+ 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f,
+ 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74,
+ 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69,
+ 0x63, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52,
+ 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x63, 0x6f,
+ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70,
+ 0x65, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x69, 0x6e, 0x5f, 0x73, 0x65,
+ 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x64, 0x65, 0x6c,
+ 0x61, 0x79, 0x49, 0x6e, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x62, 0x0a, 0x08, 0x6d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e,
+ 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e,
+ 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x71, 0x75,
+ 0x65, 0x75, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a,
+ 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79,
+ 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+ 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x35, 0x0a, 0x14,
+ 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f,
+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
+ 0x65, 0x49, 0x64, 0x32, 0x9b, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x51, 0x75, 0x65,
+ 0x75, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x44, 0x65,
+ 0x6c, 0x61, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x2e, 0x73, 0x70, 0x65,
+ 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65,
+ 0x2e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x73, 0x70, 0x65, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x64,
+ 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x2e, 0x44, 0x65, 0x6c, 0x61, 0x79,
+ 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
+ 0x00, 0x42, 0x41, 0x5a, 0x3f, 0x6d, 0x6f, 0x73, 0x6e, 0x2e, 0x69, 0x6f, 0x2f, 0x6c, 0x61, 0x79,
+ 0x6f, 0x74, 0x74, 0x6f, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
+ 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x6c,
+ 0x61, 0x79, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x3b, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x71,
+ 0x75, 0x65, 0x75, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDescOnce sync.Once
+ file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDescData = file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDesc
+)
+
+func file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDescGZIP() []byte {
+ file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDescOnce.Do(func() {
+ file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDescData = protoimpl.X.CompressGZIP(file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDescData)
+ })
+ return file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDescData
+}
+
+var file_spec_proto_extension_v1_delay_queue_delay_queue_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
+var file_spec_proto_extension_v1_delay_queue_delay_queue_proto_goTypes = []interface{}{
+ (*DelayMessageRequest)(nil), // 0: spec.proto.extension.v1.delay_queue.DelayMessageRequest
+ (*DelayMessageResponse)(nil), // 1: spec.proto.extension.v1.delay_queue.DelayMessageResponse
+ nil, // 2: spec.proto.extension.v1.delay_queue.DelayMessageRequest.MetadataEntry
+}
+var file_spec_proto_extension_v1_delay_queue_delay_queue_proto_depIdxs = []int32{
+ 2, // 0: spec.proto.extension.v1.delay_queue.DelayMessageRequest.metadata:type_name -> spec.proto.extension.v1.delay_queue.DelayMessageRequest.MetadataEntry
+ 0, // 1: spec.proto.extension.v1.delay_queue.DelayQueue.PublishDelayMessage:input_type -> spec.proto.extension.v1.delay_queue.DelayMessageRequest
+ 1, // 2: spec.proto.extension.v1.delay_queue.DelayQueue.PublishDelayMessage:output_type -> spec.proto.extension.v1.delay_queue.DelayMessageResponse
+ 2, // [2:3] is the sub-list for method output_type
+ 1, // [1:2] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_spec_proto_extension_v1_delay_queue_delay_queue_proto_init() }
+func file_spec_proto_extension_v1_delay_queue_delay_queue_proto_init() {
+ if File_spec_proto_extension_v1_delay_queue_delay_queue_proto != nil {
+ return
+ }
+ if !protoimpl.UnsafeEnabled {
+ file_spec_proto_extension_v1_delay_queue_delay_queue_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DelayMessageRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_spec_proto_extension_v1_delay_queue_delay_queue_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*DelayMessageResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 3,
+ NumExtensions: 0,
+ NumServices: 1,
+ },
+ GoTypes: file_spec_proto_extension_v1_delay_queue_delay_queue_proto_goTypes,
+ DependencyIndexes: file_spec_proto_extension_v1_delay_queue_delay_queue_proto_depIdxs,
+ MessageInfos: file_spec_proto_extension_v1_delay_queue_delay_queue_proto_msgTypes,
+ }.Build()
+ File_spec_proto_extension_v1_delay_queue_delay_queue_proto = out.File
+ file_spec_proto_extension_v1_delay_queue_delay_queue_proto_rawDesc = nil
+ file_spec_proto_extension_v1_delay_queue_delay_queue_proto_goTypes = nil
+ file_spec_proto_extension_v1_delay_queue_delay_queue_proto_depIdxs = nil
+}
diff --git a/spec/proto/extension/v1/delay_queue/delay_queue_grpc.pb.go b/spec/proto/extension/v1/delay_queue/delay_queue_grpc.pb.go
new file mode 100644
index 0000000000..b22571868c
--- /dev/null
+++ b/spec/proto/extension/v1/delay_queue/delay_queue_grpc.pb.go
@@ -0,0 +1,102 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package delay_queue
+
+import (
+ context "context"
+
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+// DelayQueueClient is the client API for DelayQueue service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type DelayQueueClient interface {
+ // Publish a delay message
+ PublishDelayMessage(ctx context.Context, in *DelayMessageRequest, opts ...grpc.CallOption) (*DelayMessageResponse, error)
+}
+
+type delayQueueClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewDelayQueueClient(cc grpc.ClientConnInterface) DelayQueueClient {
+ return &delayQueueClient{cc}
+}
+
+func (c *delayQueueClient) PublishDelayMessage(ctx context.Context, in *DelayMessageRequest, opts ...grpc.CallOption) (*DelayMessageResponse, error) {
+ out := new(DelayMessageResponse)
+ err := c.cc.Invoke(ctx, "/spec.proto.extension.v1.delay_queue.DelayQueue/PublishDelayMessage", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// DelayQueueServer is the server API for DelayQueue service.
+// All implementations should embed UnimplementedDelayQueueServer
+// for forward compatibility
+type DelayQueueServer interface {
+ // Publish a delay message
+ PublishDelayMessage(context.Context, *DelayMessageRequest) (*DelayMessageResponse, error)
+}
+
+// UnimplementedDelayQueueServer should be embedded to have forward compatible implementations.
+type UnimplementedDelayQueueServer struct {
+}
+
+func (UnimplementedDelayQueueServer) PublishDelayMessage(context.Context, *DelayMessageRequest) (*DelayMessageResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method PublishDelayMessage not implemented")
+}
+
+// UnsafeDelayQueueServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to DelayQueueServer will
+// result in compilation errors.
+type UnsafeDelayQueueServer interface {
+ mustEmbedUnimplementedDelayQueueServer()
+}
+
+func RegisterDelayQueueServer(s grpc.ServiceRegistrar, srv DelayQueueServer) {
+ s.RegisterService(&DelayQueue_ServiceDesc, srv)
+}
+
+func _DelayQueue_PublishDelayMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(DelayMessageRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(DelayQueueServer).PublishDelayMessage(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/spec.proto.extension.v1.delay_queue.DelayQueue/PublishDelayMessage",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(DelayQueueServer).PublishDelayMessage(ctx, req.(*DelayMessageRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// DelayQueue_ServiceDesc is the grpc.ServiceDesc for DelayQueue service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var DelayQueue_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "spec.proto.extension.v1.delay_queue.DelayQueue",
+ HandlerType: (*DelayQueueServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "PublishDelayMessage",
+ Handler: _DelayQueue_PublishDelayMessage_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "spec/proto/extension/v1/delay_queue/delay_queue.proto",
+}