Apache Camel - 只有当前没有使用消息时才发送到seda队列?

时间:2015-10-06 15:03:33

标签: apache-camel

是否有可能实现以下目标:

  • 将msg a发送到Incoming,路由A处理消息
  • 将msg b发送到Incoming,路由B处理消息
  • 将msg a发送到Incoming,但由于routeA仍处理第一条消息,因此该消息开始阻止传入路由处理更多消息。

路由A完成后,传入路由器将第三条消息发送给A并继续从传入队列中获取消息

Dim constr As String = ConfigurationManager.ConnectionStrings("ApplicationServices").ConnectionString
Dim query As String = "SELECT Count(cities) FROM state_table WHERE state_name=@State_Name"
Using conn As New SqlConnection(constr)
   Using comm As New SqlCommand()
      conn.Open()
      With comm
         .Connection = conn
         .CommandText = query
         .CommandType = CommandType.Text
         .Parameters.AddWithValue("@State_Name", state_name)
      End With
      Dim count As Int16 = Convert.ToInt16(comm.ExecuteScalar())
      Label1.Text = count
   End Using
End Using

1 个答案:

答案 0 :(得分:0)

SEDA将立即向生产者发回确认并在路线A / B ....内部排队请求。

要阻止incomingQueue路线中的制作人发送到A / B路线,直到他们完成,然后制作A / B路线DIRECT(同步)。

注意 - 我认为这是你要求的,但请记住,A msgs / route也会阻止所有B消息使用此设置......

另一种选择是使用ActiveMQ message groups之类的东西,它允许对相关消息进行单线程处理,同时允许其他组的并行处理等......