[TOC]

1. The Dubbo is what

Dubbo.apache.org/zh-cn/index…

Apache Dubbo™ is a high-performance Java RPC framework.

Dubbo is a distributed services framework dedicated to providing high-performance and transparent RPC remote service invocation solutions, as well as SOA service governance solutions. To put it simply, Dubbo is a service framework. If there is no distributed requirement, there is no need to use a distributed service framework like Dubbo, and it is essentially a service invocation. Basically, it is a distributed framework for remote Service invocation (moving away from WSdl in the Web Service schema and registering on Dubbo as a server and consumer). Its core components include:

  1. Remote communication: Provides an abstract encapsulation of a variety of long-connection-based NIO frameworks, including multiple threading models, serialization, and request-response mode of information exchange.

  2. Cluster fault tolerance: Provides transparent remote procedure calls based on interface methods, including multi-protocol support, and cluster support for soft load balancing, failure tolerance, address routing, and dynamic configuration.

  3. Automatic discovery: Based on registry directory services, service consumers can dynamically find service providers, address transparency, and service providers can smoothly add or subtract machines.

2. What can Dubbo do

  1. Transparent remote method invocation, which calls remote methods as if they were local methods, requires simple configuration and no API intrusion.
  2. The soft load balancer and fault tolerance mechanism can replace hardware load balancers such as F5 on the Intranet, reducing costs and single points.
  3. Automatic service registration and discovery, no longer need to write the service provider address, the registry based on the interface name query service provider IP address, and can smoothly add or remove service providers.

Dubbo uses a full Spring configuration mode to transparently access applications without any API intrusion. You only need to load Dubbo’s configuration with Spring. Dubbo is loaded based on Spring’s Schema extension.

3. The Dubbo architecture

Node roles:

Provider: exposes the service Provider of the service.

Consumer: Service Consumer that invokes the remote service.

Registry: A Registry where services are registered and discovered.

Monitor: monitors The Times and time of service invocation.

Container: service running Container.

Call relationship description:

  1. The service container is responsible for starting, loading, and running the service provider.

  2. At startup, service providers register their services with the registry.

  3. At startup, service consumers subscribe to the registry for the services they need.

  4. The registry returns a list of service provider addresses to the consumer, and if there are changes, the registry pushes the change data to the consumer based on the long connection.

  5. The service consumer, from the provider address list, selects one provider to call based on the soft load balancing algorithm. If the call fails, selects another one to call.

  6. Service consumers and providers accumulate calls and call times in memory and regularly send statistics to the monitoring center every minute.

4. How to use Dubbo

Dubbo uses a full Spring configuration mode to transparently access applications without any API intrusion. You only need to load Dubbo’s configuration with Spring. Dubbo is loaded based on Spring’s Schema extension. If you don’t want to use the Spring configuration, you can call it through the API (annotated, not recommended)

Download and install the ZooKeeper registry (not recommended for Multicast)

1.Windows

Download address: www.apache.org/dyn/closer….

Usage: Download and decompress the service center. Go to the decompressed directory and run zkserver. CMD to start the registration service center

Screenshots:

2.MacOS

Download address: www.apache.org/dyn/closer….

Usage: Go to the decompressed directory and run zkserver. sh start to start the registration service center

3.Linux

Download address: www.apache.org/dyn/closer….

Usage: Go to the decompressed directory and run zkserver. sh start to start the registration service center

Service provider

1. Define the service interface (this interface needs to be packaged separately and shared between service providers and consumers)

DemoService.java

package org.apache.dubbo.demo;

public interface DemoService {
    String sayHello(String name);
}
Copy the code
2. Service provider implementation interface :(hide implementation from service consumer)

DemoServiceImpl.java

package org.apache.dubbo.demo.provider;
 
import org.apache.dubbo.demo.DemoService;
 
public class DemoServiceImpl implements DemoService {
    public String sayHello(String name) {
        return "Hello "+ name; }}Copy the code
3. Expose services with Spring configuration declarations:

Dubbo – provider. XML:

? The XML version = "1.0" encoding = "utf-8"? ><beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
    xsi:schemaLocation="Http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
 
    <! -- Provider application information for calculating dependencies -->
    <dubbo:application name="hello-world-app"  />
 
    <! Use multicast broadcast registries to expose service addresses
    <dubbo:registry address=Multicast: / / 224.5.6.7: "1234" />
 
    <! Expose service on port 20880 with dubbo
    <dubbo:protocol name="dubbo" port="20880" />
 
    <! Declare the service interface to be exposed -->
    <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" />
 
    <! Implement the service as a local bean
    <bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl" />
</beans>
Copy the code
4. Load the Spring configuration and start the service:

The Provider. Java:

import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class Provider {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring/dubbo-provider.xml"});
        context.start();
        System.in.read(); // Press any key to exit}}Copy the code

Or use springBoot

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource("spring/dubbo-provider.xml")
public class DubboProviderApplication {

    public static void main(String[] args) throws Exception { SpringApplication.run(DubboProviderApplication.class, args); }}Copy the code

Service consumers:

Applicationcontext-dubo.xml registers the interface you need to call.

1. Reference the remote service through Spring configuration

Dubbo – consumer. XML:

<?xml version="1.0" encoding="UTF-8"? >
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
    xsi:schemaLocation="Http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
 
    <! -- Consumer application name, used to calculate dependencies, not matching conditions, not the same as provider -->
    <dubbo:application name="consumer-of-helloworld-app"  />
 
    <! Expose discovery service addresses with multicast broadcast registries -->
    <dubbo:registry address=Multicast: / / 224.5.6.7: "1234" />
 
    <! Create a remote service proxy that can use demoService as a local bean -->
    <dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" />
</beans>
Copy the code
2. Load Spring configuration and call remote service:

Consumer.java

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.apache.dubbo.demo.DemoService;
 
public class Consumer {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring/dubbo-consumer.xml"});
        context.start();
        DemoService demoService = (DemoService)context.getBean("demoService"); // Get the remote service proxy
        String hello = demoService.sayHello("world"); // Execute the remote method
        System.out.println( hello ); // Displays the result of the call}}Copy the code

Or use springBoot

import org.apache.dubbo.common.logger.Logger;
import org.apache.dubbo.common.logger.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource("spring/dubbo-consumer.xml")
public class DubboConsumerApplicaiton {

    public static final Logger logger = LoggerFactory.getLogger(DubboConsumerApplicaiton.class);

    public static void main(String[] args) { SpringApplication.run(DubboConsumerApplicaiton.class, args); }}Copy the code

Add restful interfaces to provide interface access

@RequestMapping("/demo")
public ModelAndView testDemo(a) {
    ModelAndView modelAndView = new ModelAndView("index");
    org.apache.dubbo.rpc.RpcContext.getContext().setAttachment(Constants.TAG_KEY, "gray");
    modelAndView.addObject("result", demoService.sayHello("Dubbo Meetup"));
    return modelAndView;
}
Copy the code

Modify the corresponding INDEX page

<! PUBLIC DOCTYPE HTML "- / / / DTD/W3C XHTML 1.0 Strict / / EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" > < HTML xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Vertical centering in valid CSS</title> <style type="text/css"> .text{text-align:center; } </style> </head> <body> <div class="text" style="margin-top:300px; font-size: 50px;" >${result.msg}</div> <div class="text" style="margin-top:30px; font-size: 35px; color:#5079bb;" >From : ${result.userName}</div> </body> </html>Copy the code
3. Dubbo Management Page

Github.com/apache/dubb…

Starts to http://localhost:8080/dubbo-admin/

Enter the password root/root

Application page:

Provider page:

Consumer Page:

Service Page:

Whether the test is successful, as long as the state is normal, ok….

provider-log:

The 2019-07-04 11:37:49, 326 [DubboServerHandler - 192.168.0.46:20880 - thread - 2] INFO org. Apache. Dubbo. Demo. Impl. DemoServiceImpl  (DemoServiceImpl.java:31) - [DUBBO] [11:37:49] Hello Alterem., request from consumer: /192.168.0.46:52031, dubbo version: 2.7.0, current host: 192.168.0.46Copy the code

5. Possible problems with using Dubbo

1, org. Springframework. Beans. Factory. BeanCreationException

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mgmtFactoryInoutDetailsController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'goodsInoutServiceImpl' available
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:321) ~[spring-context-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1268) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.web.method.HandlerMethod.createWithResolvedBean(HandlerMethod.java:299) ~[spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:323) ~[spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:61) ~[spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:352) ~[spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1160) [spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:940) [spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) [spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) [spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) [servlet-api.jar:na]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) [spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [servlet-api.jar:na]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-websocket.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) [shiro-core-12.4..jar:12.4.]
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) [shiro-core-12.4..jar:12.4.]
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) [shiro-core-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-12.4..jar:12.4.]
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347) [spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263) [spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) [spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at ue.common.filter.MultiPrefixHideUrlFilter.doFilter(MultiPrefixHideUrlFilter.java:76) [YKXCommon-33..01.jar:na]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at ue.common.filter.PageableFilter.doFilterInternal(PageableFilter.java:48) [YKXCommon-33..01.jar:na]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) [catalina.jar:8. 036.]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [catalina.jar:8. 036.]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [catalina.jar:8. 036.]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) [catalina.jar:8. 036.]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [catalina.jar:8. 036.]
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) [catalina.jar:8. 036.]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [catalina.jar:8. 036.]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) [catalina.jar:8. 036.]
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) [tomcat-coyote.jar:8. 036.]
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) [tomcat-coyote.jar:8. 036.]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) [tomcat-coyote.jar:8. 036.]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) [tomcat-coyote.jar:8. 036.]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:18.. 0 _131]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:18.. 0 _131]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8. 036.]
	at java.lang.Thread.run(Thread.java:748) [na:18.. 0 _131]
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'goodsInoutServiceImpl' available
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1213) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:275) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:522) ~[spring-context-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:496) ~[spring-context-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:627) ~[spring-context-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-43.16..RELEASE.jar:43.16..RELEASE]
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:318) ~[spring-context-43.16..RELEASE.jar:43.16..RELEASE]...67 common frames omitted
Copy the code

Cause analysis:

Error creating bean with name 'mgmtFactoryInoutDetailsController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'goodsInoutServiceImpl' available
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:321)
Copy the code

The solution

Add the corresponding declarative exposure service in dubo-provider.xml

<dubbo:service interface="ue.biz.service.biz.GoodsInoutService" ref="goodsInoutServiceImpl"/>
Copy the code

Add the corresponding service subscription in dubo-consumer.xml

<dubbo:reference id="goodsInoutServiceImpl" interface="ue.biz.service.biz.GoodsInoutService"/>
Copy the code

2, org. Apache. Dubbo. RPC. RpcException

org.apache.dubbo.rpc.RpcException: No provider available from registry 12079.246.86.:2181 for service ue.biz.service.bas.EnterpriseUserService on consumer 192168.. 063. use dubbo version 27.. 0, please check status of providers(disabled, not registered or in blacklist).
	at org.apache.dubbo.registry.integration.RegistryDirectory.doList(RegistryDirectory.java:522) ~[dubbo-27.. 0.jar:27.. 0]
	at org.apache.dubbo.rpc.cluster.directory.AbstractDirectory.list(AbstractDirectory.java:82) ~[dubbo-27.. 0.jar:27.. 0]
	at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.list(AbstractClusterInvoker.java:274) ~[dubbo-27.. 0.jar:27.. 0]
	at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:238) ~[dubbo-27.. 0.jar:27.. 0]
	at org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:75) ~[dubbo-27.. 0.jar:27.. 0]
	at org.apache.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:57) ~[dubbo-27.. 0.jar:27.. 0]
	at org.apache.dubbo.common.bytecode.proxy7.getCurrent(proxy7.java) ~[dubbo-27.. 0.jar:27.. 0]
	at ue.mgmt.controller.CommonController.main(CommonController.java:787) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:18.. 0 _131]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:18.. 0 _131]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:18.. 0 _131]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:18.. 0 _131]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) ~[spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) ~[spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:849) ~[spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:760) ~[spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) [spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) [spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) [spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) [servlet-api.jar:na]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) [spring-webmvc-43.20..RELEASE.jar:43.20..RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) [servlet-api.jar:na]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-websocket.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) [shiro-core-12.4..jar:12.4.]
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) [shiro-core-12.4..jar:12.4.]
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) [shiro-core-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) [shiro-web-12.4..jar:12.4.]
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-12.4..jar:12.4.]
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347) [spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263) [spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) [spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at ue.common.filter.MultiPrefixHideUrlFilter.doFilter(MultiPrefixHideUrlFilter.java:76) [YKXCommon-33..01.jar:na]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at ue.common.filter.PageableFilter.doFilterInternal(PageableFilter.java:48) [YKXCommon-33..01.jar:na]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-43.20..RELEASE.jar:43.20..RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) [catalina.jar:8. 036.]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) [catalina.jar:8. 036.]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) [catalina.jar:8. 036.]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [catalina.jar:8. 036.]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) [catalina.jar:8. 036.]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) [catalina.jar:8. 036.]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [catalina.jar:8. 036.]
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) [catalina.jar:8. 036.]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [catalina.jar:8. 036.]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) [catalina.jar:8. 036.]
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) [tomcat-coyote.jar:8. 036.]
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) [tomcat-coyote.jar:8. 036.]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) [tomcat-coyote.jar:8. 036.]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) [tomcat-coyote.jar:8. 036.]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:18.. 0 _131]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:18.. 0 _131]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8. 036.]
	at java.lang.Thread.run(Thread.java:748) [na:18.. 0 _131]
Copy the code

Cause analysis,

No provider available from registry 12079.246.86.:2181 for service ue.biz.service.bas.EnterpriseUserService on consumer 192168.. 063. use dubbo version 27.. 0, please check status of providers
Copy the code

The solution

The possible cause is that the providers are not started or the exposed services of the provider are disabled. Start the providers or disable them

3, Java. Lang. An IllegalStateException

java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [io.netty.channel.nio.NioEventLoop]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
	at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1352)
	at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1340)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1205)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1166)
	at ch.qos.logback.classic.spi.PackagingDataCalculator.loadClass(PackagingDataCalculator.java:207)
	at ch.qos.logback.classic.spi.PackagingDataCalculator.bestEffortLoadClass(PackagingDataCalculator.java:226)
	at ch.qos.logback.classic.spi.PackagingDataCalculator.computeBySTEP(PackagingDataCalculator.java:138)
	at ch.qos.logback.classic.spi.PackagingDataCalculator.populateUncommonFrames(PackagingDataCalculator.java:113)
	at ch.qos.logback.classic.spi.PackagingDataCalculator.populateFrames(PackagingDataCalculator.java:105)
	at ch.qos.logback.classic.spi.PackagingDataCalculator.calculate(PackagingDataCalculator.java:57)
	at ch.qos.logback.classic.spi.ThrowableProxy.calculatePackagingData(ThrowableProxy.java:147)
	at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:124)
	at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:440)
	at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:396)
	at ch.qos.logback.classic.Logger.warn(Logger.java:713)
	at io.netty.util.internal.logging.Slf4JLogger.warn(Slf4JLogger.java:151)
	at io.netty.channel.nio.NioEventLoop.handleLoopException(NioEventLoop.java:486)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:469)
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:748)

Copy the code

Cause analysis,

this web application instanceThe first error condition is that Tomcat needs to be restarted. Couldnot load [io.netty.channel.nio.NioEventLoop]. This does not directly deduce the problem condition, but it is clearly about loading.Copy the code

The solution

To sum up the above two points, generally speaking, it is the restart of the project (maybe because of the direct modification of the code, the project was reloaded), and connected to the database (login, etc.), the above error message occurred. The reason is that when Tomcat is restarted, the threads of the previous Tomcat are not completely closed, and this exception will be reported when Tomcat is started recently.

4, org. Apache. Dubbo. Remoting. TimeoutException

Caused by: org.apache.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2019-07-04 15:05:468, end time: elapsed: 94 ms, Server Elapsed: 9931 ms, timeout: 10000 ms, request: Request [ID =0, version=2.0.2, TwoWay =true, Event =false, broken=false, data=RpcInvocation [methodName=find, parameterTypes=[class ue.biz.entity.sys.Permission$Type], arguments=[url], Attachments = {path = ue. Biz. Service. Sys. PermissionService, interface = ue. Biz. Service. Sys. PermissionService, version = 0.0.0, timeout=10000}]], channel: / 192.168.0.46:54424 - > / 192.168.0.46: at 20880 org.apache.dubbo.remoting.exchange.support.DefaultFuture.returnFromResponse(DefaultFuture.java:296) ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. Dubbo, remoting. Exchange. Support. DefaultFuture. Get (DefaultFuture. Java: 191) ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. Dubbo, remoting. Exchange. Support. DefaultFuture. Get (DefaultFuture. Java: 164) ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. Dubbo.. RPC protocol. The dubbo. DubboInvoker. DoInvoke (DubboInvoker. Java: 108) ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. The dubbo.. RPC protocol. AbstractInvoker. Invoke (AbstractInvoker. Java: 156) ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. The dubbo. Monitor. Support. MonitorFilter. Invoke (MonitorFilter. Java: 88) ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. Dubbo.. RPC protocol. The ProtocolFilterWrapper $1. Invoke (ProtocolFilterWrapper. Java: 73) ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. Dubbo.. RPC protocol. The dubbo. Filter. FutureFilter. Invoke (49) FutureFilter. Java: ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. Dubbo.. RPC protocol. The ProtocolFilterWrapper $1. Invoke (ProtocolFilterWrapper. Java: 73) ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. The dubbo. RPC. Filter. ConsumerContextFilter. Invoke (ConsumerContextFilter. Java: 54) ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. Dubbo.. RPC protocol. The ProtocolFilterWrapper $1. Invoke (ProtocolFilterWrapper. Java: 73) ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. Dubbo. RPC. The listener. ListenerInvokerWrapper. Invoke (ListenerInvokerWrapper. Java: 77) ~ [dubbo - 2.7.0 jar: 2.7.0] at org. Apache. The dubbo.. RPC protocol. InvokerWrapper. Invoke (56) InvokerWrapper. Java: ~ [dubbo - 2.7.0 jar: 2.7.0] the at org.apache.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:80) ~ [dubbo - 2.7.0 jar: 2.7.0]... 65 common frames omittedCopy the code

Cause analysis,

org.apache.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time: 2019-07-04 15:05:41363..end time: 2019-07-04 15:05:51388., client elapsed: 94 ms, server elapsed: 9931 ms, timeout: 10000 ms, request: Request [id=0, version=2. 02., twoway=true, event=false, broken=false, data=RpcInvocation [methodName=find, parameterTypes=[class ue.biz.entity.sys.Permission$Type], arguments=[url], attachments={path=ue.biz.service.sys.PermissionService
Copy the code

The solution

Add the timeout in dubo-provider. XML

<dubbo:provider delay="1" timeout="10000" retries="0"/>
Copy the code