小编ser*_*ces的帖子

ActiveMQ 重新传递策略 - 它是如何工作的?

任何人都可以解释 ActiveMQ 重新交付策略实际上是如何工作的吗?它是在客户端还是服务器端工作?

假设我有一个重新传递策略,最多可以重新传递 10 分钟的消息,每次尝试之间间隔 30 分钟,那么失败的消息究竟在哪里?

假设消息现在失败并且必须在 30 分钟后重新发送,那么消息在哪里?

我看到同一个消费者在 30 分钟后收到消息。

我想知道 ActiveMQ 在哪里存储此消息 30 分钟。

如果我关闭了消费者或我的消费者崩溃了,我能在 30 分钟后恢复消息吗?

我浏览了这些 ActiveMQ 页面以了解重新交付策略,但没有找到任何信息:

http://activemq.apache.org/redelivery-policy.html http://activemq.apache.org/message-redelivery-and-dlq-handling.html

activemq-classic jms

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

Spring DefaultMessageListenerContainer和ActiveMQ

我已将Spring DefaultMessageListenerContainer配置为消耗来自队列的消息的ActiveMQ使用者.我们称之为"Test.Queue"我将这些代码部署在4台不同的机器上,所有机器都配置到同一个ActiveMQ实例来处理来自同一"Test.Queue"队列的消息.

所有4台机器都启动并运行后,我将最大消费者大小设置为20,我看到消费者数量与队列数相比为80(4*最大消费者大小= 80)

当生成并发送到队列的消息变得很高时,一切都很好.

当有1000个消息时,在80个消费者中,让我们说其中一个被卡住它会冻结Active MQ以停止向其他消费者发送消息.

所有消息都永远停留在ActiveMQ中.

由于我有4台机器,最多有80名消费者,我不知道哪个消费者没有承认.

我停下来重新启动所有4台机器,当我停止那些卡住了坏消费者的机器时,消息再次开始流动.

我不知道如何配置DefaultMessageListenerContainer以放弃坏消费者并立即发信号通知ActiveMQ以开始发送消息.

即使没有Spring,我也可以创建场景,如下所示:

  1. 我最多生成了5000条消息并将它们发送到"Test.Queue"队列
  2. 我创建了2个消费者(消费者A,B)并在一个消费者B的onMessage()方法中,我让线程长时间休眠(Thread.sleep(Long.MAX_VALUE)),其条件就像当前时间%13是0然后让线程进入休眠状态.

  3. 跑这两个消费者.

  4. 去了Active MQ,发现队列有2个消费者.
  5. A和B都在处理消息
  6. 在某个时间点,消费者B的onMessage()被调用,当当前时间%13的条件为0时,它使线程处于休眠状态.
  7. 消费者B被卡住了,它无法向经纪人承认
  8. 我回到Active MQ Web控制台,仍然将消费者视为2,但没有消息出列.
  9. 现在我创建了另一个消费者C并运行它来消费.
  10. 只有ActiveMQ中的消费者数量从2增加到3.
  11. 但是消费者C并没有消费任何东西,因为经纪人没有发送任何持有它们的消息,因为它仍在等待消费者B承认它.
  12. 我还注意到消费者A没有消费任何东西
  13. 我去杀死消费者B,现在所有的消息都被消耗掉了.

假设A,B,C由Spring的DefaultMessageListenerContainer管理,我如何调整Spring DefaultMessageListenerContainer以便在不能确认X秒数后将该坏消费者从池中(在我的情况下是消费者B)中取出,立即确认代理经纪人没有永久保留消息.

谢谢你的时间.

感谢我能解决这个问题.

spring activemq-classic

6
推荐指数
1
解决办法
3675
查看次数

JSON、Jackson 和多行字符串

我有以下 JSON。

{ "content" : "value" }
Run Code Online (Sandbox Code Playgroud)

我让杰克逊构建 JSON 字符串。

如果值是多行文本,例如:

A
B
C
Run Code Online (Sandbox Code Playgroud)

我看到的是: { "content" : "A\r\nB\r\nC" }

\r\n为每一行显式设置(CRLF)。

我想知道我是否可以配置 Jackson 来输出这个:

{ "content" : "A
B
C" }
Run Code Online (Sandbox Code Playgroud)

这是; A、B 和 C 呈现为 3 行,而不是在 1 行中呈现为“A\r\nB\r\nC”。

string json jackson

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

ActiveMQ 和 maxPageSize

我想将 maxPageSize 设置为比默认值 200 更大的数字。

这是我在 activemq.xml 文件中设置的方式:

<destinationPolicy>
            <policyMap>
              <policyEntries>
              ---
                <policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb" maxPageSize="SOME_LARGE_NUMBER">
                </policyEntry>
              </policyEntries>
            </policyMap>
        </destinationPolicy>
Run Code Online (Sandbox Code Playgroud)

此更改帮助我使用 QueueBrowser.getEnumeration() 获取队列中的消息数,因为即使队列中的消息数大于 200,它也会返回 200。

请参阅:http : //docs.oracle.com/javaee/1.4/api/javax/jms/QueueBrowser.html QueueBrowser.getEnumeration()。

将 maxPageSize 从 200 更改为 1000 的副作用是什么?它会影响经纪人的表现吗?

除了此页面上的“一次从商店页面发送的持久消息的最大数量”之外,我没有看到有关此属性的任何文档:

http://activemq.apache.org/per-destination-policies.html

谢谢你的时间!

activemq-classic

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

用于获取相同国家/地区代码的国家/地区名称的 Google libphone 号码

如何使用 Google 的 libphone 号码https://github.com/googlei18n/libphonenumber来查看电话号码是否是加拿大或美国的电话号码,因为它们共享相同的国家/地区代码?

例如:+1415-555-0123 是美国、旧金山 +1647-555-0123 是加拿大、多伦多

只需提供电话号码,我就需要获取国家/地区名称。

当我尝试类似以下内容时,它返回“true”,而我的期望是它应该返回 false,因为电话号码不是美国号码而是加拿大号码。

 PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
 boolean isPossible = phoneUtil.isPossibleNumber("+16475550123", "US");
Run Code Online (Sandbox Code Playgroud)

java libphonenumber

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

Spring没有加载属性

在@Configuration类中引用applicationContext.xml时Spring不加载属性

@Configuration
@ImportResource("classpath:applicationContext.xml")
public class SpringConfig {

  @Autowired
    private MyBean1 myBean1;

  @Bean
    public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();

    }

  @Bean(name = "myBean2")
    public MyBean2 myBean2() {
    MyBean2 bean2 = new MyBean2();
    return bean2;
    }


}
Run Code Online (Sandbox Code Playgroud)

applicationContext.xml中:

<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="location">           
                <value>classpath:test.properties</value>           
        </property>
    </bean>

  <bean id="myBean1" class="com.foo.bar.MyBean1">
        <property name="name" value="${name}" />  
        <property name="age" value="${age}" />  
    </bean>
Run Code Online (Sandbox Code Playgroud)

Test.properties :(在类路径中)

name=foo
age=10
Run Code Online (Sandbox Code Playgroud)

当我使用以下代码行加载applicationContext.xml文件时,它工作正常:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Run Code Online (Sandbox Code Playgroud)

我看到印有以下几行:

2015-05-30 10:01:08.277 [INFO] org.springframework.beans.factory.config.PropertyPlaceholderConfigurer:172 - Loading properties file from class …
Run Code Online (Sandbox Code Playgroud)

java spring properties-file

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

Java中的UTF-16到String

假设我有"样本"这个词.在UTF-16 BE中,这表示为00 53 00 61 00 6D 00 70 00 6C 00 65.当我有这个时,我想用Java将它转换回"Sample".我该怎么做呢?

java string utf-16

0
推荐指数
1
解决办法
1909
查看次数

Jackson JSON 解析枚举值

假设我有一个枚举类,如下所示:

public enum Lang {

    ENGLISH("en_US"), FRENCH("fr_CA");

    String val;

    Lang(String val) {
       this.val = val;
    }

    public String getValue() {
        return val;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个 POJO 如下:

public class Foo {

    private String bar;
    private Lang lang;


    public String getBar() {
        return bar;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }

    public Lang getLang() {
        return lang;
    }

    public void setLang(Lang lang) {
        this.lang = lang;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何配置 Jackson 以将以下有效负载转换为 POJO 类?

{ "bar": "someValue", "lang": "en-US"} …

java enums json jackson

0
推荐指数
1
解决办法
3084
查看次数