Dubbo直连报错,已经解决

第一个错

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘cacheManager’ available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:687)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1207)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
… 39 more

解决办法,消费者springmvc,头信息配置错误

修复后的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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--扫描组件-->
    <context:component-scan base-package="com.it.controller"/>

    <!--开启注解驱动-->
    <mvc:annotation-driven/>

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

第二个错

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote method: getUserById, provider: dubbo://localhost:20880/com.it.service.UserService?application=01-user-consumer&dubbo=2.6.2&interface=com.it.service.UserService&methods=getUserById&pid=11532&register.ip=192.168.189.1&revision=1.0.0&side=consumer&timestamp=1608993483840, cause: Failed to send response: Response [id=0, version=2.0.0, status=20, event=false, error=null, result=RpcResult [result=com.it.entity.User@76a0d689, exception=null]], cause: java.lang.IllegalStateException: Serialized class com.it.entity.User must implement java.io.Serializable
java.lang.IllegalStateException: Serialized class com.it.entity.User must implement java.io.Serializable
at com.alibaba.com.caucho.hessian.io.SerializerFactory.getDefaultSerializer(SerializerFactory.java:395)
at com.alibaba.com.caucho.hessian.io.SerializerFactory.getSerializer(SerializerFactory.java:369)
at com.alibaba.com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:389)
at com.alibaba.dubbo.common.serialize.hessian2.Hessian2ObjectOutput.writeObject(Hessian2ObjectOutput.java:88)
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.encodeResponseData(DubboCodec.java:192)
at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encodeResponse(ExchangeCodec.java:277)
at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encode(ExchangeCodec.java:73)
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.encode(DubboCountCodec.java:38)
at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter I n t e r n a l E n c o d e r . e n c o d e ( N e t t y C o d e c A d a p t e r . j a v a : 80 ) a t o r g . j b o s s . n e t t y . h a n d l e r . c o d e c . o n e o n e . O n e T o O n e E n c o d e r . h a n d l e D o w n s t r e a m ( O n e T o O n e E n c o d e r . j a v a : 66 ) a t o r g . j b o s s . n e t t y . c h a n n e l . D e f a u l t C h a n n e l P i p e l i n e . s e n d D o w n s t r e a m ( D e f a u l t C h a n n e l P i p e l i n e . j a v a : 591 ) a t o r g . j b o s s . n e t t y . c h a n n e l . D e f a u l t C h a n n e l P i p e l i n e InternalEncoder.encode(NettyCodecAdapter.java:80) at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:66) at org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:591) at org.jboss.netty.channel.DefaultChannelPipeline InternalEncoder.encode(NettyCodecAdapter.java:80)atorg.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:66)atorg.jboss.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:591)atorg.jboss.netty.channel.DefaultChannelPipelineDefaultChannelHandlerContext.sendDownstream(DefaultChannelPipeline.java:776)
at org.jboss.netty.channel.SimpleChannelHandler.writeRequested(SimpleChannelHandler.java:304)
at com.alibaba.dubbo.remoting.transport.netty.NettyHandler.writeRequested(NettyHandler.java:98)
at org.jboss.netty.channel.SimpleChannelHandler.handleDownstream(SimpleChannelHandler.java:266)
at org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:591)
at org.jboss.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:582)
at org.jboss.netty.channel.Channels.write(Channels.java:611)
at org.jboss.netty.channel.Channels.write(Channels.java:578)
at org.jboss.netty.channel.AbstractChannel.write(AbstractChannel.java:251)
at com.alibaba.dubbo.remoting.transport.netty.NettyChannel.send(NettyChannel.java:100)
at com.alibaba.dubbo.remoting.transport.AbstractPeer.send(AbstractPeer.java:53)
at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:173)
at com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:51)
at com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:80)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

错误原因很明显,远程调用,实体类需要序列化;

package com.it.entity;

import java.io.Serializable;

/**
 * @Author coding
 * @Date 2020-12-26 16:05
 */
public class User implements Serializable {
    private Integer id;
    private String userName;
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

第三个错

Caused by: org.jboss.netty.channel.ChannelException: Failed to bind to: /0.0.0.0:20880
	at org.jboss.netty.bootstrap.ServerBootstrap.bind(ServerBootstrap.java:303)
	at com.alibaba.dubbo.remoting.transport.netty.NettyServer.doOpen(NettyServer.java:93)
	at com.alibaba.dubbo.remoting.transport.AbstractServer.<init>(AbstractServer.java:63)
	... 76 more
Caused by: java.net.BindException: Address already in use: bind

解决办法,关闭服务,重新启动。。。


-END-

如果你喜欢我的分享,欢迎关注微信公众号 java学长分享技术干货!

悄悄告诉你免费赠送重磅互联网架构师教程,提升职场技术水平!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Spring Boot 中使用 Dubbo 直连,可以通过在 application.properties 或 application.yml 中配置 Dubbo 的连接信息来实现。 1. 配置 application.properties 在 application.properties 文件中添加以下配置: ``` # Dubbo 直连配置 dubbo.registry.address=N/A dubbo.protocol.name=dubbo dubbo.protocol.port=20880 dubbo.provider.timeout=30000 dubbo.consumer.timeout=30000 dubbo.consumer.check=false dubbo.reference.filter=tracing dubbo.reference.filter=consumerContextFilter dubbo.consumer.retries=0 dubbo.consumer.loadbalance=random dubbo.proxy=javassist ``` 其中,dubbo.registry.address 设置为 N/A 表示不使用注册中心,而是直接跟指定的 Dubbo 服务提供者进行连接。dubbo.protocol.name 和 dubbo.protocol.port 分别指定了 Dubbo 的协议和端口,dubbo.provider.timeout 和 dubbo.consumer.timeout 分别指定了 Dubbo 服务提供者和服务消费者的超时时间,dubbo.consumer.check 设置为 false 表示关闭 Dubbo 的服务调用检查功能,dubbo.reference.filter 指定了 Dubbo 的服务引用过滤器,dubbo.consumer.retries 设置为 0 表示关闭 Dubbo 的重试功能,dubbo.consumer.loadbalance 设置为 random 表示使用随机负载均衡算法,dubbo.proxy 设置为 javassist 表示使用 Javassist 代理方式。 2. 配置 application.yml 在 application.yml 文件中添加以下配置: ``` dubbo: registry: address: N/A protocol: name: dubbo port: 20880 provider: timeout: 30000 consumer: timeout: 30000 check: false retries: 0 loadbalance: random filter: - tracing - consumerContextFilter proxy: javassist ``` 与 application.properties 中的配置相同,只是使用了 YAML 格式。 3. 使用 @DubboReference 注解 在需要调用 Dubbo 服务的代码处,使用 @DubboReference 注解引入 Dubbo 的服务接口,代码示例如下: ``` @RestController public class DemoController { @DubboReference(url = "dubbo://127.0.0.1:20880") private DemoService demoService; @GetMapping("/hello") public String sayHello(@RequestParam String name) { return demoService.sayHello(name); } } ``` 其中,@DubboReference 注解的 url 属性指定了 Dubbo 的服务地址,可以直接指定 IP 地址和端口号。使用 @DubboReference 注解的方式不需要在 application.properties 或 application.yml 中配置 Dubbo 的连接信息。 需要注意的是,使用 Dubbo 直连方式调用服务时,需要保证服务提供者和消费者的 Dubbo 版本和协议相同,否则可能会出现调用失败或者异常的问题。同时,在生产环境下不推荐使用 Dubbo 直连方式,建议使用注册中心进行服务管理和发现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悍将朱哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值