小编Rap*_*ale的帖子

Java的Bigdecimal.divide和舍入

在工作中,我们在尝试将大数除以1000时发现了一个问题.这个数字来自数据库.

说我有这个方法:

private static BigDecimal divideBy1000(BigDecimal dividendo) {
    if (dividendo == null) return null;

    return dividendo.divide(BigDecimal.valueOf(1000), RoundingMode.HALF_UP);
}
Run Code Online (Sandbox Code Playgroud)

当我拨打以下电话时

divideBy1000(new BigDecimal("176100000"))
Run Code Online (Sandbox Code Playgroud)

我收到176100的预期值.但是,如果我尝试下面这一行

divideBy1000(new BigDecimal("1761e+5"))
Run Code Online (Sandbox Code Playgroud)

我收到价值200000.为什么会这样?这两个数字是相同的,具有不同的表示,最新的是我从数据库收到的.我知道,不知何故,JVM将数字1761除以1000,向上舍入并在最后填充0.

避免这种行为的最佳方法是什么?请记住,原始号码不受我控制.

java bigdecimal

26
推荐指数
3
解决办法
2万
查看次数

Spring Websocket与Stomp全功能代理和故障转移

我有spring的配置和一个完整的功能stomp代理(activemq):

@Configuration
@EnableWebSocketMessageBroker
public class WebsocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    private static Logger LOG = org.slf4j.LoggerFactory.getLogger(WebsocketConfig.class);

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableStompBrokerRelay("/topic/", "/queue/");
        config.setApplicationDestinationPrefixes("/app");
        config.setUserDestinationPrefix("/user");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/socket").withSockJS();
    }
}
Run Code Online (Sandbox Code Playgroud)

天真地,我虽然spring使用了我当前的activemq配置,但实际上它尝试使用默认的stomp端口连接到localhost中的服务器.我发现可以通过输入以下内容来更改此配置:

config.enableStompBrokerRelay("/topic/", "/queue/")
            .setRelayHost("activeMQHOST")
            .setRelayPort(9999);
Run Code Online (Sandbox Code Playgroud)

多数民众赞成,但目前我有两个经纪人的故障转移设置(master/flave with shared file system).如何为stomp broker relay配置这样的设置?

如果不可能,我想在以下解决方案中:

  1. 使用简单(内存中)代理,这是不可取的
  2. ActiveMQ用于多个操作(不限于websockets),我不知道是否建议将stomp/websockets队列与其他功能的队列混合使用.考虑一下,我可以创建另一个 activeMQ实例(可能使用VM传输.

第二种选择是可取的吗?

spring activemq-classic stomp websocket spring-websocket

9
推荐指数
1
解决办法
590
查看次数

如何使用故障转移传输处理Activemq的最大帧大小异常

我正在开发一个使用activemq来交换消息的应用程序,有些很大,我想取消它.

我们使用activemq故障转移传输与两个ActiveMQ实例(主/从).代理本身对消息具有100mb帧大小限制.

问题是:如果我尝试发送大于100mb的消息,ActiveMQ服务器将关闭连接.此时,故障转移传输将尝试重新连接并再次发送消息,从而创建无限循环.

客户端记录以下内容:

2017-01-05 09:19:11.910  WARN 14680 --- [0.1:61616@57025] o.a.a.t.failover.FailoverTransport       : Transport (tcp://localhost:61616) failed , attempting to automatically reconnect: {}

java.io.EOFException: null
    at java.io.DataInputStream.readInt(DataInputStream.java:392) ~[na:1.8.0_91]
    at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:267) ~[activemq-client-5.13.4.jar:5.13.4]
    at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:240) ~[activemq-client-5.13.4.jar:5.13.4]
    at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:232) ~[activemq-client-5.13.4.jar:5.13.4]
    at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:215) ~[activemq-client-5.13.4.jar:5.13.4]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91]

2017-01-05 09:19:11.921  INFO 14680 --- [ActiveMQ Task-1] o.a.a.t.failover.FailoverTransport       : Successfully reconnected to tcp://localhost:61616
2017-01-05 09:19:11.923  WARN 14680 --- [0.1:61616@57026] o.a.a.t.failover.FailoverTransport       : Transport (tcp://localhost:61616) failed , attempting to automatically reconnect: {}

java.io.EOFException: null
    at java.io.DataInputStream.readInt(DataInputStream.java:392) ~[na:1.8.0_91]
    at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:267) ~[activemq-client-5.13.4.jar:5.13.4]
    at …
Run Code Online (Sandbox Code Playgroud)

java failover activemq-classic jms spring-jms

7
推荐指数
1
解决办法
6534
查看次数

Akka远程路由主机名配置问题

我正在体验我正在制作的工具的akka​​远程功能.实际上,我能够使核心和远程系统在具有不同端口的同一主机中工作.请注意,我的远程服务器在路由器上运行,如akka文档中所述.

现在我正在尝试使用几个azure虚拟机来进行更好的实验,但我遇到了一些问题.

核心应用程序具有以下配置(出于安全原因,我已更改了一些名称):

akka.actor.deployment {
  /querierActor/querierPool {
    router = round-robin-pool
    nr-of-instances = 12
    target.nodes = [
       "akka.tcp://SYSTEM@remote-srv01.cloudapp.net:2560"
      ,"akka.tcp://SYSTEM@remote-srv02.cloudapp.net:2560"
      ,"akka.tcp://SYSTEM@remote-srv03.cloudapp.net:2560"

    ]
  }
}

// remote configuration. Use it for multiple machines calculation
akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    enabled-transports = ["akka.remote.netty.tcp"]
    netty.tcp {
      maximum-frame-size = 100MiB
      port = 2552
      hostname = "0.0.0.0"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

远程主机具有以下配置:

akka.actor.deployment {
  /querierActor/querierPool {
    router = balancing-pool
    nr-of-instances = 15
  }
}

akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote …
Run Code Online (Sandbox Code Playgroud)

java azure akka akka-cluster akka-remote-actor

5
推荐指数
1
解决办法
2501
查看次数

Jquery remove()动态创建的元素

我有一个模板系统,在某些例外情况下,必须在将DOM元素附加到DOM后删除它们.

我通常用我拥有的模板字符串创建一个jquery对象.例:

var template = "<div><div class='itenToRemove'>REMOVE!</div><div>DO NOT REMOVE!</div></div>"

var $elementToAppend = $(template);
Run Code Online (Sandbox Code Playgroud)

但有时我需要删除元素的某些部分,比如

$elementToAppend.remove('.itenToRemove')
Run Code Online (Sandbox Code Playgroud)

但它不起作用!为什么不?显然,只有DOM上已经插入的元素才能使用remove方法.

我创建了一个说明我问题的jsFiddle:https://jsfiddle.net/raphaeldovale/mz6Lrrbh/1/

html javascript jquery

2
推荐指数
1
解决办法
2774
查看次数

使用主题和队列处理@JmsListener的更简单方法

我正在为一个应用程序制作原型,以测试将来的应用程序的Spring消息传递功能。

我知道我们需要做的一件事是在同一应用程序中处理来自activemq的主题和队列。因此,在同一个bean中,我应该有一个@JmsListener注释的方法,该方法将听到一个队列,而另一个将听到一个主题。那可能吗?

什么是更简单的方法?我看到一些答案使用带有弹簧JMS主题像这一个,但在这种情况下我想我需要创建两个使用DefaultMessageListenerContainer,一个是话题,另一个用于队列。这是最好的解决方案?

有没有针对此问题的注释方法?

java spring jms spring-jms

2
推荐指数
1
解决办法
2508
查看次数