service providers
提示用户配置服务提供
此文档已经不再维护。您当前查看的是快照版本。如果想要查看最新版本的文档,请参阅最新版本。
service providers
第一步:编写提供端的服务
编写需要被编码的结构体,由于使用
Hessian2
作为编码协议,User
需要实现JavaClassName
方法,它的返回值在dubbo中对应User类的类名。type User struct { Id string Name string Age int32 Time time.Time } func (u User) JavaClassName() string { return "org.apache.dubbo.User" }
编写业务逻辑,
UserProvider
相当于dubbo中的一个服务实现。需要实现Reference
方法,返回值是这个服务的唯一标识,对应dubbo的beans
和path
字段。type UserProvider struct { } func (u *UserProvider) GetUser(ctx context.Context, req []interface{}) (*User, error) { println("req:%#v", req) rsp := User{"A001", "hellowworld", 18, time.Now()} println("rsp:%#v", rsp) return &rsp, nil } func (u *UserProvider) Reference() string { return "UserProvider" }
注册服务和对象
func init() { config.SetProviderService(new(UserProvider)) // ------for hessian2------ hessian.RegisterPOJO(&User{}) }
第二步:编写主程序
引入必需的dubbo-go包
import ( hessian "github.com/apache/dubbo-go-hessian2" _ "github.com/apache/dubbo-go/cluster/cluster_impl" _ "github.com/apache/dubbo-go/cluster/loadbalance" "github.com/apache/dubbo-go/common/logger" _ "github.com/apache/dubbo-go/common/proxy/proxy_factory" "github.com/apache/dubbo-go/config" _ "github.com/apache/dubbo-go/filter/filter_impl" _ "github.com/apache/dubbo-go/protocol/dubbo" _ "github.com/apache/dubbo-go/registry/protocol" _ "github.com/apache/dubbo-go/registry/zookeeper" )
main 函数
func main() { config.Load() }
第三步:编写配置文件并配置环境变量
设置配置文件 log.yml, server.yml
- log.yml
level: "error" development: true disableCaller: false disableStacktrace: false sampling: encoding: "console" # encoder encoderConfig: messageKey: "message" levelKey: "level" timeKey: "time" nameKey: "logger" callerKey: "caller" stacktraceKey: "stacktrace" lineEnding: "" levelEncoder: "capital" timeEncoder: "iso8601" durationEncoder: "seconds" callerEncoder: "short" nameEncoder: "" outputPaths: - "stderr" errorOutputPaths: - "stderr" initialFields:
- server.yml
# dubbo server yaml configure file # application config application: organization: "dubbo.io" name: "UserInfoServer" module: "dubbo-go user-info server" version: "0.0.1" environment: "dev" # registry config registries: "demoZk": protocol: "zookeeper" timeout: "3s" address: "127.0.0.1:2181" # service config services: "UserProvider": registry: "demoZk" protocol: "dubbo" interface: "org.apache.dubbo.UserProvider" loadbalance: "random" warmup: "100" cluster: "failover" methods: - name: "GetUser" retries: 1 loadbalance: "random" # protocol config protocols: "dubbo": name: "dubbo" port: 20000 protocol_conf: dubbo: session_number: 700 session_timeout: "180s" getty_session_param: compress_encoding: false tcp_no_delay: true tcp_keep_alive: true keep_alive_period: "120s" tcp_r_buf_size: 262144 tcp_w_buf_size: 65536 pkg_rq_size: 1024 pkg_wq_size: 512 tcp_read_timeout: "1s" tcp_write_timeout: "5s" wait_timeout: "1s" max_msg_len: 1024000 session_name: "server"
主要编辑以下部分:
registries
结点下需要配置zk的数量和地址services
结点下配置服务的具体信息,需要配置interface
配置,修改为对应服务的接口名,服务的key对应第一步中Provider
的Reference
返回值
把上面的两个配置文件分别配置为环境变量
export CONF_PROVIDER_FILE_PATH="xxx" export APP_LOG_CONF_FILE="xxx"
本文章源码详情见git:https://github.com/apache/dubbo-go-samples/tree/1.5/helloworld/go-server
最后修改 April 3, 2023: update links (#2495) (f74ef4dc40)