Azure::ServiceBus 订阅不接收通过 REST 发送到主题的消息 POST

Azure::ServiceBus subscription does not receive messages sent to topic via REST POST

使用 Azure::ServiceBus ruby SDK 将消息发送到 Azure 服务总线主题工作正常。客户端正在使用订阅和 Azure::ServiceBus 来接收消息。

但是,如果发件人使用 ASB REST API 来 POST 一条消息,则订阅没有消息。只有使用 Azure::ServiceBus 发送的消息才会出现在订阅中。

例如,这适用于使用 Azure::ServiceBus 发送的消息,但对于使用 REST:

发送的消息则收不到任何东西
message = azure_service_bus_service.receive_subscription_message("testtopic", "retry-count-subscriber", { :peek_lock => true })

ASB returns 201 用于 POSTing 以便消息成功发送到主题。

我这边可以正常工作。

require 'net/http'
require 'net/https'
require 'uri'
require 'json'

uri = URI('https://yourservicebusnamespacename.servicebus.windows.net/yourservicebustopicname/messages')
bearertoken = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyIsImtpZCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyJ9.eyJhdWQiOiJodHRwczovL2Jvd21hbjEwMTIuc2VydmljZWJ1cy53aW5kb3dzLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0L2U0YzlhYjRlLWJkMjctNDBkNS04NDU5LTIzMGJhMmE3NTdmYi8iLCJpYXQiOjE2MTE3MzUwNTgsIm5iZiI6MTYxMTczNTA1OCwiZXhwIjoxNjExODE4MTU4LCJhaW8iOiJFMlpnWUtqc3RMKzRaZjRsM2xtVHQ4eU91UHJzQVFBPSIsImFwcGlkIjoiYjljNTdjOGQtMTkwNC00YjRiLWI2MjgtNDkxNzFiYzc4MzI0IiwiYXBwaWRhY3IiOiIxIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvZTRjOWFiNGUtYmQyNy00MGQ1LTg0NTktMjMwYmEyYTc1N2ZiLyIsIm9pZCI6ImY5Y2ExOTI2LTBhOTUtNDQ1Yi04NDE5LTBjNGE2NGY5ZGM3NiIsInJoIjoiMC5BU2tBVHF2SjVDZTkxVUNFV1NNTG9xZFgtNDE4eGJrRUdVdEx0aWhKRnh2SGd5UXBBQUEuIiwic3ViIjoiZjljYTE5MjYtMGE5NS00NDViLTg0MTktMGM0YTY0ZjlkYzc2IiwidGlkIjoiZTRjOWFiNGUtYmQyNy00MGQ1LTg0NTktMjMwYmEyYTc1N2ZiIiwidXRpIjoiTGZLVXJRUzdtazZ3QUREdFFoZ29BQSIsInZlciI6IjEuMCJ9.GE_j9d1l6XlPrmx7q8bN-gJYKaP8DFf2JUErwPsa-Ca--UbkUJ-XGlmVbAq2oRY_Z-2zsVbLQVNA0soB1NZVwDcSk3I_cJdIVK8J0jx5Yh0AE3XdFnObDd8zo4lcupwQbEZQCGx_5L_iJU1cKZwHDMVmtKPvk2X8MhM2Ks6OOftT_2Wxz-lo79pc9K7L-XPbHpyjRdAfbYxLhifDKGX4XBpViAxZ7gFGULI1FILW7VvWZU02aUTkNOVf_csO3UJLNjmgcm-_nljq1tka6nQC4YiJKo3dMtlwOUoeJwxdFn1Mblvs6xdGsvIxGvxDwRSvy8n4ySUyrapOtgoGDMi82Q"
header = {'Content-Type': 'text/plain',
          'Authorization': bearertoken  
         }
mes = "This is testbowman message."
Net::HTTP.start(uri.host, uri.port,   
  :use_ssl => uri.scheme == 'https') do |http|
  request = Net::HTTP::Post.new(uri,header)
  request.body = mes

  response = http.request request # Net::HTTPResponse object 
  puts response.body
end 

puts 'Request is OK.'

并且请不要忘记将相关的添加应用程序添加到 azure 服务总线命名空间的 RBAC 角色中:

问题是由订阅者 SqlFilter 引起的:

retry_count > 9

ruby post 在正确设置时工作:

message = Azure::ServiceBus::BrokeredMessage.new(message, { :retry_count => 10 })

:retry_count 更改为任何小于 9 的值也会重现 ruby 代码中的问题。