Azure EventHub 上的 Qpid 接收器

Qpid receiver on Azure EventHub

我已经有了基于 Azure EventHub 的工作应用程序。现在我需要编写 java 连接到现有基础设施的接收器。 现有配置:

事件中心 > SomeName > 消费者组 > SomeGroupName

在管理控制台中,我看不到任何 QUEUE 或 TOPIC 定义。分析工作的 c# 代码我可以看到 hub-name + group-name 足以连接。

我重建了 url,允许我通过 java 进行连接(目前连接有效)。

amqps://SomeName.servicebus.windows.net

所以我的问题:

1) 当我指定组名而不是队列/主题时,我得到异常 The messaging entity 'sb://SomeName.servicebus.windows.net/SomeGroupName' could not be found. 那里使用的模型是什么而不是 queue/topic?

2) 如何使用 Apache-qpid 中的此类基础架构?

您使用的是在旧门户中创建的事件中心还是使用新门户创建的事件中心?

EventHub 不是消息总线,因此没有队列或主题,这是正确的。

使用者组不是地址的一部分。该地址是使用命名空间和该命名空间中事件中心的名称构建的。

所以地址变成:

sb://SomeNameSpaceName.servicebus.windows.net/SomeEventHubName 

你能post你分析过的c#代码吗?既然你有一个已经在工作的应用程序,也许我们可以找出阻止它现在工作的差异。

解决问题的最大提示给了我以下link:http://theitjourney.blogspot.com/2015/12/sendreceive-messages-using-amqp-in-java.html

因此,此模型中既没有队列也没有主题。您需要连接到特定的提供商并指定正确的 EventHub,如下所示:

application.properties:

connectionfactory.SBCF=amqps://<PolicyName>:<PolicyKey>@<DomainName>.servicebus.windows.net
queue.EventHub=<EventHubName>/ConsumerGroups/$Default/Partitions/0

其中:

在下面的代码允许我创建 MessageConsumer 之后:

Hashtable<String, String> env = new Hashtable<>();
env.put(Context.INITIAL_CONTEXT_FACTORY,
               "org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory");
env.put(Context.PROVIDER_URL, 
    getClass().getResource("/application.properties").toString());
Context context = null;

context = new InitialContext(env);
// Look up ConnectionFactory 
ConnectionFactory cf = (ConnectionFactory) context.lookup("SBCF");
Destination queue = (Destination) context.lookup("EventHub");

// Create Connection
Connection connection = cf.createConnection();

// Create receiver-side Session, MessageConsumer
Session receiveSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer receiver = receiveSession.createConsumer(queue);