In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-18 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Internet Technology >
Share
Shulou(Shulou.com)06/02 Report--
What is the role of AllDispatcher in dubbo, many novices are not very clear about this, in order to help you solve this problem, the following editor will explain for you in detail, people with this need can come to learn, I hope you can gain something.
Dispatcher
Dubbo-2.7.3/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/Dispatcher.java
@ SPI (AllDispatcher.NAME) public interface Dispatcher {/ * * dispatch the message to threadpool. * * @ param handler * @ param url * @ return channel handler * / @ Adaptive ({Constants.DISPATCHER_KEY, dispather, "channel.handler"}) / / The last two parameters are reserved for compatibility with the old configuration ChannelHandler dispatch (ChannelHandler handler, URL url);}
The Dispatcher interface defines the dispatch method and returns ChannelHandler.
AllDispatcher
Dubbo-2.7.3/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/dispatcher/all/AllDispatcher.java
Public class AllDispatcher implements Dispatcher {public static final String NAME = "all"; @ Override public ChannelHandler dispatch (ChannelHandler handler, URL url) {return new AllChannelHandler (handler, url);}}
AllDispatcher implements the Dispatcher interface, and its dispatch method returns AllChannelHandler
AllChannelHandler
Dubbo-2.7.3/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/dispatcher/all/AllChannelHandler.java
Public class AllChannelHandler extends WrappedChannelHandler {public AllChannelHandler (ChannelHandler handler, URL url) {super (handler, url);} @ Override public void connected (Channel channel) throws RemotingException {ExecutorService executor = getExecutorService (); try {executor.execute (channel, handler, ChannelState.CONNECTED)) } catch (Throwable t) {throw new ExecutionException ("connect event", channel, getClass () + "error when process connected event.", t);} @ Override public void disconnected (Channel channel) throws RemotingException {ExecutorService executor = getExecutorService (); try {executor.execute (new ChannelEventRunnable (channel, handler, ChannelState.DISCONNECTED)) } catch (Throwable t) {throw new ExecutionException ("disconnect event", channel, getClass () + "error when process disconnected event.", t);} @ Override public void received (Channel channel, Object message) throws RemotingException {ExecutorService executor = getExecutorService (); try {executor.execute (channel, handler, ChannelState.RECEIVED, message) } catch (Throwable t) {/ / TODO A temporary solution to the problem that the exception information can not be sent to the opposite end after the thread pool is full. Need a refactoring / / fix The thread pool is full, refuses to call, does not return, and causes the consumer to wait for time out if (message instanceof Request & & t instanceof RejectedExecutionException) {Request request = (Request) message If (request.isTwoWay ()) {String msg = "Server side (" + url.getIp () + "," + url.getPort () + ") threadpool is exhausted, detail msg:" + t.getMessage (); Response response = new Response (request.getId (), request.getVersion () Response.setStatus (Response.SERVER_THREADPOOL_EXHAUSTED_ERROR); response.setErrorMessage (msg); channel.send (response); return }} throw new ExecutionException (message, channel, getClass () + "error when process received event.", t);} @ Override public void caught (Channel channel, Throwable exception) throws RemotingException {ExecutorService executor = getExecutorService (); try {executor.execute (new ChannelEventRunnable (channel, handler, ChannelState.CAUGHT, exception)) } catch (Throwable t) {throw new ExecutionException ("caught event", channel, getClass () + "error when process caught event.", t);}
AllChannelHandler inherits WrappedChannelHandler. Its connected, disconnected, received, and caught all acquire the thread pool through the getExecutorService of the parent class, and then execute the created ChannelEventRunnable;received method to RejectedExecutionException and message is Request when an exception is caught, and SERVER_THREADPOOL_EXHAUSTED_ERROR is returned when request is twoWay
Summary
The Dispatcher interface defines the dispatch method and returns ChannelHandler.
AllChannelHandler inherits WrappedChannelHandler. Its connected, disconnected, received and caught all acquire the thread pool through the getExecutorService of the parent class, and then execute the created ChannelEventRunnable
AllChannelHandler's received method returns SERVER_THREADPOOL_EXHAUSTED_ERROR when it catches an exception, RejectedExecutionException and message is Request, and request is twoWay
Is it helpful for you to read the above content? If you want to know more about the relevant knowledge or read more related articles, please follow the industry information channel, thank you for your support.
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.