Generic Implementation
Generic implementation for providing and publishing services when the provider does not have an API (SDK)
Note
Please distinguish between the previous document on Generic Invocation, which is for consumers, and Generic Implementation, which is for providers.
The generic interface implementation method is mainly used in scenarios where the server side does not have API interfaces and model class metadata. All POJOs in parameters and return values are represented using Map, usually for framework integration. For example, to implement a generic remote service Mock framework, you can handle all service requests by implementing the GenericService interface.
Use Cases
Service Registration: The service provider registers services in the service registry, such as Zookeeper, which stores information about the service, such as its interfaces, implementation classes, and addresses.
Service Deployment: The service provider deploys the service on a server and makes it available to consumers.
Service Invocation: Users call services generated by the service registry proxy, forwarding requests to the service provider, which executes the service and sends responses back to the consumer.
Service Monitoring: Providers and consumers can use the Dubbo framework to monitor services, allowing them to view service execution and make adjustments as needed.
Usage
Refer to the complete source code for this example at dubbo-samples-generic-impl.
Implement the GenericService
interface in Java code
package com.foo;
public class MyGenericService implements GenericService {
public Object $invoke(String methodName, String[] parameterTypes, Object[] args) throws GenericException {
if ("sayHello".equals(methodName)) {
return "Welcome " + args[0];
}
}
}
Exposing Generic Implementation through Spring
Declare the service implementation in Spring XML configuration
<bean id="genericService" class="com.foo.MyGenericService" />
<dubbo:service interface="com.foo.BarService" ref="genericService" />
Exposing Generic Implementation through API
...
// Use org.apache.dubbo.rpc.service.GenericService instead of all interface implementations
GenericService xxxService = new XxxGenericService();
// This instance is heavyweight, encapsulating all connections to the registry and service provider; please cache it
ServiceConfig<GenericService> service = new ServiceConfig<GenericService>();
// Weak type interface name
service.setInterface("com.xxx.XxxService");
// If you need to set a different version for the service
service.setVersion("1.0.0");
// Point to a generic service implementation
service.setRef(xxxService);
// Expose and register the service
service.export();
- When setting
ServiceConfig
, usesetGeneric("true")
to enable generic invocation - When setting
ServiceConfig
, use setRef to specify the implementation class, and set an object ofGenericService
, not the actual service implementation class object - Other settings are consistent with normal API service starts
Feedback
Was this page helpful?
Yes No
Last modified September 30, 2024: Update & Translate Overview Docs (#3040) (d37ebceaea7)