项目文件夹

文件
Copilot 80345fe63d docs: clarify gRPC server option ordering and service name usage (#2820)
* Initial plan

* docs: clarify gRPC server option ordering and service name usage

- Fix all examples to show Server option before Name option
- Add note explaining why option ordering matters
- Add new section on "Option Ordering Issue" in Common Errors
- Add new section on "Service Name vs Package Name" in Common Errors
- Update transport.md to show proper ordering with comment

Co-authored-by: asim <17530+asim@users.noreply.github.com>

* docs: refine comments based on code review feedback

- Clarify that Server ordering before Name is mandatory
- Remove confusing comment about Client ordering being for consistency

Co-authored-by: asim <17530+asim@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: asim <17530+asim@users.noreply.github.com>
2025-11-25 09:26:59 +00:00

92 行
2.2 KiB
Markdown

---
layout: default
---
# Transport
The transport layer is responsible for communication between services.
## Features
- Pluggable transport implementations
- Secure and efficient communication
## Implementations
Supported transports include:
- HTTP (default)
- NATS (`go-micro.dev/v5/transport/nats`)
- gRPC (`go-micro.dev/v5/transport/grpc`)
- Memory (`go-micro.dev/v5/transport/memory`)
## Important: Transport vs Native gRPC
The gRPC **transport** uses gRPC as an underlying communication protocol, similar to how NATS or RabbitMQ might be used. It does **not** provide native gRPC compatibility with tools like `grpcurl` or standard gRPC clients generated by `protoc`.
If you need native gRPC compatibility (to use `grpcurl`, polyglot gRPC clients, etc.), you must use the gRPC **server** and **client** packages instead:
```go
import (
grpcServer "go-micro.dev/v5/server/grpc"
grpcClient "go-micro.dev/v5/client/grpc"
)
// Important: Server must be specified before Name
service := micro.NewService(
micro.Server(grpcServer.NewServer()),
micro.Client(grpcClient.NewClient()),
micro.Name("myservice"),
)
```
See [Native gRPC Compatibility](guides/grpc-compatibility.md) for a complete guide.
Plugins are scoped under `go-micro.dev/v5/transport/<plugin>`.
You can specify the transport when initializing your service or via env vars.
## Example Usage
Here's how to use a custom transport (e.g., gRPC) in your Go Micro service:
```go
package main
import (
"go-micro.dev/v5"
"go-micro.dev/v5/transport/grpc"
)
func main() {
t := grpc.NewTransport()
service := micro.NewService(
micro.Transport(t),
)
service.Init()
service.Run()
}
```
NATS transport:
```go
import (
"go-micro.dev/v5"
tnats "go-micro.dev/v5/transport/nats"
)
func main() {
t := tnats.NewTransport()
service := micro.NewService(micro.Transport(t))
service.Init()
service.Run()
}
```
## Configure via environment
```bash
MICRO_TRANSPORT=nats MICRO_TRANSPORT_ADDRESS=nats://127.0.0.1:4222 go run main.go
```
Common variables:
- `MICRO_TRANSPORT`: selects the transport implementation (`http`, `nats`, `grpc`, `memory`).
- `MICRO_TRANSPORT_ADDRESS`: comma-separated list of transport addresses.