嘘~ 正在从服务器偷取页面 . . .

调用本地未启用的dubbo服务


报错

查看报表时,前端无法返回数据,后端报错

java.lang.RuntimeException: org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.reflect.UndeclaredThrowableException

org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.reflect.UndeclaredThrowableException

at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431)

at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)

at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:447)

at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:277)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)

at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)

at dnn.module.storage.service.WareHouseService$$EnhancerBySpringCGLIB$$ee391476.findOne(<generated>)

at dnn.module.storage.dubbo.WareHouseDsiImpl.findOne(WareHouseDsiImpl.java:29)

at com.alibaba.dubbo.common.bytecode.Wrapper38.invokeMethod(Wrapper38.java)

at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)

at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)

at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)

at dnn.framework.dubbo.DubboProviderFilter.invoke(DubboProviderFilter.java:41)

at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)

at io.seata.integration.dubbo.alibaba.AlibabaDubboTransactionPropagationFilter.invoke(AlibabaDubboTransactionPropagationFilter.java:68)

at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)

at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)

at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)

at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)

at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)

at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)

at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)

at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)

at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)

at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(

报错原因

  • 查看报错原因,里边有一条提示
    报错原因提示

分析原因

  • 在调用dubbo服务的时候,对应的dubbo服务出错,所以报错了。

解决措施

  • 1.首先要在C:\Users\王美娜类似这种相同的路径下面放入一个dubbo-resolve.properties文件。
  • 2.在workspace中该项目的同名文件。
    同名文件相关设置
  • 3.设置该文件的dubbo地址,127.0.0.1表示本地的地址,后边的端口号30137为提供项目所对应的dubbo协议接口,该端口可以从项目application-local.properties文件中获得。
  • 4.修改完相关的配置后,一定要重启提供服务与被服务的两个项目。

注意问题

  • 1.注意配置时要根据报错提示来进行配置,无关的不用配置,相关需要进行配置的dubbo会在报错日志中进行提示。
  • 2.寻找项目配置该dubbo时,一定不要盲目寻找项目进行配置,提供dubbo的项目一定要含有日志中所报错的dubbo服务。

拓展

1.类似错误

类似错误

2.项目启动错误

useSSL=false

Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+,
5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to ‘false’. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

原因

  • 原因是MySQL在高版本需要指明是否进行SSL连接。
    SSL协议提供服务主要: 		
         1)认证用户服务器,确保数据发送到正确的服务器;    .
         2)加密数据,防止数据传输途中被窃取使用;
         3)维护数据完整性,验证数据在传输过程中是否丢失;
    
     当前支持SSL协议两层:
     	 	SSL记录协议(SSL Record Protocol):建立靠传输协议(TCP)高层协议提供数据封装、压缩、加密等基本功能支持
       SSL握手协议(SSL Handshake Protocol):建立SSL记录协议用于实际数据传输始前通讯双进行身份认证、协商加密
       算法、 交换加密密钥等。
    

解决措施及useSSL=false与useSSL=true的区别。

mysql进行连接的时候,如果mysql的版本是5.7之后的版本必须要加上useSSL=false,mysql5.7以及之前的版本则不用进行添加useSSL=false,会默认为false,一般情况下都是使用useSSL=false,尤其是在将项目部署到linux上时,一定要使用useSSL=false!!!,useSSL=true是进行安全验证,一般通过证书或者令牌什么的,useSSL=false就是通过账号密码进行连接,通常使用useSSL=false.

3.dubbo错误

出现原因

dubbo只注册:设置为false为禁止注册。

解决措施

false改为true

dubbo只注册

  • 只订阅的含义就是当前应用只会消费所需接口,就算有提供接口,也不会注册到注册中心。

  • 配置形式:默认值都是truefalse 表示禁止注册

     dubbo.provider.register=false
    dubbo.registry.register=false
    dubbo.protocol.register=false

上面三个配置都会禁止注册当前应用的所有接口到注册中心,即使我们在接口上显示@DubboService(register = true),也不会注册接口到注册中心。


知识更新

  • dubbo设置成false表达的含义为不主动对外暴露,是为了避免本地对业务逻辑修改时,如果本地的dubbo服务对外暴露,由于注册中心分配调用的提供者无法指定,因为会导致其他人调用到自己的dubbo服务。设置成不暴露后依旧可以通过直接指定ip:端口调起。

文章作者: 张纯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 张纯 !
  目录