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.
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.
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];
}
}
}
Declare the service implementation in Spring XML configuration
<bean id="genericService" class="com.foo.MyGenericService" />
<dubbo:service interface="com.foo.BarService" ref="genericService" />
...
// 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();
ServiceConfig
, use setGeneric("true")
to enable generic invocationServiceConfig
, use setRef to specify the implementation class, and set an object of GenericService
, not the actual service implementation class object