- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Camel 中有一条路线,我想在发生异常时重试,但我想设置一个属性,以便路线第二次可以做一些稍微不同的事情,以尝试阻止错误在重试时再次发生。这是说明我目前正在尝试的想法的路线。
from("direct:onExceptionTest")
.onException(Exception.class)
.maximumRedeliveries(1)
.log("Retrying")
.setProperty("retrying", constant(true))
.end()
.log("Start")
.choice()
.when(property("retrying").isNull())
.log("Throwing")
.throwException(new Exception("Hello world"))
.end()
.end()
.log("Done")
显然这不是真正的路线;整个 choice
主体只是在某些情况下模拟我的组件错误。我期待看到记录以下消息:
Bắt đầu
Throwing
Retrying
Bắt đầu
Done
但我实际看到的是:
Bắt đầu
Throwing
Retrying
Failed delivery for (MessageId: ... on ExchangeId: ...). Exhausted after delivery attempt: 2 caught: java.lang.Exception: Hello world. Processed by failure processor: FatalFallbackErrorHandler[Pipeline[[Channel[Log(onExceptionTest)[Retrying]], Channel[setProperty(retrying, true)]]]]
我已经尝试将 handled(true)
添加到异常处理程序中,但这只是抑制错误消息。我没有看到第二条开始或完成日志消息。
为什么我的路线不像我预期的那样运行,我需要做什么才能让它按照我想要的方式运行?
@ProgrammerDan 指出问题在于重新交付并不是我想要实现的目标,这可以解释为什么我的路线不起作用!所以我需要在我的处理程序中完成工作,但我的路由调用 Web 服务并有一些其他步骤,我不想在处理程序中复制所有这些。我想出了这个,它按预期工作,但它涉及从一开始就再次调用自身的路由。这是一个坏主意吗?我会因为这种方法而陷入困境吗?
from("direct:onExceptionTest")
.onException(Exception.class)
.onWhen(property("retrying").isNull()) // don't retry forever
.log("Retrying")
.setProperty("retrying", constant(true))
.handled(true)
.to("direct:onExceptionTest") // is recursion bad?
.end()
.log("Start")
.choice()
.when(property("retrying").isNull())
.log("Throwing")
.throwException(new Exception("Hello world"))
.end()
.end()
.log("Done")
1 Câu trả lời
sử dụng onRedelivery
Và Processor
来设置属性:
String KEY = "retrying";
from("direct:onExceptionTest")
.onException(RuntimeException.class)
.onRedelivery(new Processor() { // Sets a processor that should be processed before a redelivery attempt.
@Ghi đè
public void process(final Exchange exchange) throws Exception {
LOG.info("Retrying");
exchange.setProperty(KEY, true);
}
})
.maximumRedeliveries(1)
.handled(true)
.end()
.log("Start")
.process(new Processor() {
@Ghi đè
public void process(final Exchange exchange) throws Exception {
LOG.info("No problem");
}
})
.process(new Processor() {
@Ghi đè
public void process(final Exchange exchange) throws Exception {
if (exchange.getProperty(KEY) == null) {
LOG.info("Throwing");
throw new RuntimeException("Hello World");
}
else {
LOG.info("No throwing");
}
}
})
.log("Done");
这打印
[ main] route1 INFO Start
[ main] OnExceptionHandler INFO No problem
[ main] OnExceptionHandler INFO Throwing
[ main] OnExceptionHandler INFO Retrying
[ main] OnExceptionHandler INFO No throwing
[ main] route1 INFO Done
正如@ProgrammerDan 指出的那样,只有失败的处理器会重新执行,而不是第一个没有任何问题通过的处理器。
biên tập:
如果必须重新完成所有处理,那么您可以使用带有 doTry
Và doCatch
的子路由,如下所示:
from("direct:onExceptionTest")
.doTry()
.to("direct:subroute")
.doCatch(RuntimeException.class)
.setProperty(KEY, constant(true))
.to("direct:subroute")
.end()
.log("Done");
from("direct:subroute")
.log("Start")
.process(new Processor() {
@Ghi đè
public void process(final Exchange exchange) throws Exception {
LOG.info("No problem");
}
})
.process(new Processor() {
@Ghi đè
public void process(final Exchange exchange) throws Exception {
if (exchange.getProperty(KEY) == null) {
LOG.info("Throwing");
throw new RuntimeException("Hello World");
}
else {
LOG.info("No throwing");
}
}
});
TừCamel Docs :
When using
doTry
..doCatch
..doFinally
then the regular Camel Error Handler does not apply. That means anyonException
or the likes does not trigger. The reason is thatdoTry
..doCatch
..doFinally
is in fact its own error handler and that it aims to mimic and work like how try/catch/finally works in Java.
关于apache-camel - Camel 消息重新传递未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22719023/
Tôi đã đọc rằng nếu một bộ sưu tập được "phát hành" thì nó cũng sẽ phát hành tất cả các đối tượng của nó. Mặt khác, tôi cũng đọc rằng một bộ sưu tập sẽ giải phóng các đối tượng của nó khi bộ sưu tập đó được giải phóng. Nhưng điều cuối cùng đó không phải lúc nào cũng xảy ra, như Apple đã nói. Hệ thống quyết định xem có nên hủy phân bổ hay không. Trong hầu hết các trường hợp
Tôi có một ứng dụng máy khách-máy chủ sử dụng WCF để giao tiếp và NetDataContractSerializer để tuần tự hóa đồ thị đối tượng. Vì có rất nhiều dữ liệu được truyền giữa máy chủ và máy khách nên tôi đã cố gắng tinh chỉnh các thành viên dữ liệu
Tôi cần trợ giúp về hàng đợi JMS và xử lý tin nhắn. Tôi có một tình huống mà tôi cần xử lý đồng bộ các thông báo cho một nhóm thuộc tính cụ thể, nhưng có thể xử lý đồng thời các thông báo trên nhiều nhóm thuộc tính khác nhau. Tôi đã học được một số điều về nhóm tin nhắn và hàng đợi theo từng thuộc tính cụ thể của từng nhóm. Ý tưởng của tôi là tôi muốn nhắm mục tiêu
Gần đây tôi bắt đầu sử dụng C++ và tôi có một mong muốn mạnh mẽ là #define print(msg) std::cout void print(T const& msg) { std::cout void
Tôi đã viết một bài kiểm tra đơn giản để sử dụng JGroups. Có hai ứng dụng đơn giản như thế này import org.jgroups.*; import org.jgroups.conf.ConfiguratorFact
Câu hỏi này đã có câu trả lời ở đây: Trình duyệt của bạn không hỗ trợ nhắn tin Firebase, làm sao để giải quyết vấn đề này? (3 câu trả lời) Đã đóng 7 tháng trước
Trong ứng dụng bảng điều khiển C# của mình, tôi đang cố gắng cập nhật một tài khoản trong CRM 2016. IsFaulted vẫn trả về giá trị true. Khi tôi phân tích sâu hơn, nó trả về thông báo lỗi sau: EntityState phải được thiết lập
Tôi đang cố gắng ghi json sau vào máy chủ graylog qua tcp: {"facility":"GELF","file":"","full_message":"Test Message Tcp",
Tôi đang sử dụng khung nhắn tin của Django để chỉ ra các hoạt động thành công và hoạt động không thành công. Làm thế nào để khắc phục sự cố thông báo đăng nhập và đăng xuất tài khoản? Hiện tại, sau khi đăng nhập, trang đích hiển thị rằng bạn đã đăng nhập thành công bằng "tên người dùng". Tôi không muốn hiển thị thông báo này nhưng tất cả các thông báo thành công khác đều phải được hiển thị. Nỗ lực của tôi
Tôi đã vô hiệu hóa thông báo qDebug() bằng cách viết CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT trong tệp .pro. Điều này tốt. Tôi tự hỏi liệu điều đó có thể không
Tôi đang sử dụng ThrottleRequest để hạn chế số lần đăng nhập. Trong Kendler.php tôi có 'throttle' => \Illuminate\Routing\Middleware\Throttl
Tôi có một tập lệnh đưa ra ngoại lệ thông qua die. Khi phát hiện ngoại lệ, tôi muốn xuất thông báo mà không đính kèm thông tin vị trí. Tập lệnh: #!/usr/bin/perl -w use strict; eval { die "Lỗi của tôi
Các loại tin nhắn được phép là gì (chuỗi, byte, số nguyên, v.v.)? Kích thước tối đa của một tin nhắn là bao nhiêu? Số lượng hàng đợi và trao đổi tối đa là bao nhiêu? Câu trả lời hay nhất Về lý thuyết, bất cứ thứ gì cũng có thể được lưu trữ/gửi dưới dạng tin nhắn. Trên thực tế, bạn không muốn lưu trữ bất cứ thứ gì trong hàng đợi. Nếu hàng đợi chủ yếu là
Về cơ bản, tôi đang cố gắng tạo một GUI đơn giản để sử dụng với Robocopy. Tôi đang sử dụng một quy trình để mở Robocopy và chuyển hướng đầu ra đến một hộp văn bản như thế này: Với MyProcess.StartI
Tôi muốn ghi lại các tin nhắn đến hàng đợi MQ vào cơ sở dữ liệu/tệp hoặc hàng đợi nhật ký khác và tôi không thể sửa đổi mã hiện có. Có cách nào để triển khai một số tiện ích ghi nhật ký tin nhắn tương tự như trình đánh hơi HTTP không? Hoặc có thể MQ có một số chức năng tích hợp để ghi lại tin nhắn?
Tôi có một trang với bảng dữ liệu single_selection và một nút lệnh. Nút lệnh gọi phương thức bean để xác minh rằng lựa chọn đã được thực hiện. Nếu không, nó sẽ hiển thị thông báo cảnh báo người dùng. Nếu một lựa chọn được thực hiện, nó sẽ điều hướng đến một lựa chọn khác
Tôi biết MSVC có thể thực hiện việc này thông qua tin nhắn pragma -> http://support.microsoft.com/kb/155196 Có cách nào để gcc in cảnh báo hoặc tin nhắn do người dùng tạo không? (Tôi không thể tìm thấy thung lũng
Liệu các thông điệp Erlang gốc có thể cung cấp hiệu suất hợp lý khi có số lượng lớn các nút hoặc dữ liệu nhị phân không? Trường hợp 1: Có một nhóm động gồm khoảng 50-200 máy (nút erlang). Nội dung được thêm vào hoặc xóa đi liên tục, cứ khoảng 10 phút lại có một nội dung được thêm vào hoặc xóa đi.
Tôi muốn biết cách hiển thị tin nhắn chào mừng "Chào mừng người dùng, bạn đã đăng nhập" sau khi người dùng đăng nhập và tin nhắn đó sẽ biến mất trong vòng 5 giây. Tin nhắn sẽ hiển thị một lần sau khi người dùng đăng nhập thành công, nhưng sẽ không hiển thị lại khi người dùng truy cập trang chủ liên tục trong cùng một phiên. Bởi vì tôi là ho
Mã của tôi hoạt động tốt nếu tôi chỉ sử dụng thông báo Welcome, nhưng khi in con trỏ p->client_name thì thông báo không được căn giữa. Vậy câu hỏi của tôi là làm thế nào tôi có thể căn giữa tin nhắn và tên khách hàng như thể chúng là một tin nhắn. Tại sao hiện tại chỉ có
Tôi là một lập trình viên xuất sắc, rất giỏi!