Về phía chúng tôi, chúng tôi chọn thêm thời gian hết hạn vào các đích cụ thể bằng cách sử dụng tuyến đường lạc đà được triển khai trong dịch vụ ActiveMQ.
Điều duy nhất cần làm là tạo một tệp XML như sau với tên, ví dụ: setJMSExpiration.xml
:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<camelContext id="camel-set-expiration" xmlns="http://camel.apache.org/schema/spring">
<!-- Copy route for each destination to expire -->
<route id="setJMSExpiration.my.queue.dlq">
<from uri="broker:queue:MY.QUEUE.DLQ"/>
<setHeader headerName="JMSExpiration">
<!-- Message will expire after 1 day -->
<spel>#{T(java.lang.System).currentTimeMillis() + 86400000}</spel>
</setHeader>
<to uri="broker:queue:MY.QUEUE.DLQ"/>
</route>
<route id="setJMSExpiration.another.queue">
<from uri="broker:queue:ANOTHER.QUEUE"/>
<setHeader headerName="JMSExpiration">
<!-- Message will expire after 5 days -->
<spel>#{T(java.lang.System).currentTimeMillis() + 432000000}</spel>
</setHeader>
<to uri="broker:queue:ANOTHER.QUEUE"/>
</route>
</camelContext>
</beans>
và nhập nó trong activemq.xml
cấu hình của bạn với:
<!-- Add default Expiration (file in the same directory) -->
<import resource="setJMSExpiration.xml"/>
Hoặc bạn cũng có thể cung cấp cụ thể per destination policies nếu bạn không muốn những thông điệp hết hạn để đạt được hàng đợi ActiveMQ.DLQ.
<policyEntry queue="MY.QUEUE.DLQ">
<deadLetterStrategy>
<sharedDeadLetterStrategy processExpired="false" />
</deadLetterStrategy>
</policyEntry>
<policyEntry queue="ANOTHER.QUEUE">
<deadLetterStrategy>
<sharedDeadLetterStrategy processExpired="false" />
</deadLetterStrategy>
</policyEntry>
Hạn chế duy nhất của cách này là bạn không thể dễ dàng sử dụng ký tự đại diện như nó được mã hóa ở đây (bạn có thể, nhưng nó sẽ cần một số thích nghi bằng cách sử dụng tiêu đề điểm đến JMS trong con đường lạc đà).
Chúng tôi cố gắng để các nhà sản xuất xác định timeToLive (và buộc họ càng nhiều càng tốt) nhưng không phải lúc nào cũng có thể buộc họ thay đổi mã của họ, điều này để giảm thiểu số lượng các tuyến đường như vậy.
Nguồn
2017-07-21 12:24:01
Có vẻ đầy hứa hẹn, tôi sẽ chụp ảnh –