【发布时间】:2020-08-17 20:06:42
【问题描述】:
我是 ActiveMQ 的新手,正在尝试尝试主题的工作。我创建了一个使用 JMS 的生产者和两个使用 Spring 配置的消费者侦听器。我确实知道,如果使用多个消费者,那么每个消费者都应该有一个唯一的客户端 ID。即使在保持客户端 ID 的唯一性之后,我也会收到相同的错误。
ERROR | Could not refresh JMS Connection for destination 'hetal_rachh_topic' - retrying using FixedBackOff{interval=5000, currentAttempts=4, maxAttempts=unlimited}. Cause: Broker: localhost - Client: tata_consumer already connected from tcp://127.0.0.1:52917
ERROR | Could not refresh JMS Connection for destination 'hetal_rachh_topic' - retrying using FixedBackOff{interval=5000, currentAttempts=4, maxAttempts=unlimited}. Cause: Broker: localhost - Client: cipla_consumer already connected from tcp://127.0.0.1:52918
注意:我什至尝试只创建一个 JMS 侦听器容器,但错误仍然表明特定客户端已连接。
我正在尝试做的步骤 -
- 使用具有两个 API 的 REST 控制器创建了一个 maven 项目。第一个 API 只是初始化一个数组列表。第二个 API 调用生产者,该生产者使用 JMSTemplate 向主题发送消息。
- 在 spring 上下文文件中只配置了一个 JMS 监听器
- UI 代码使用 axios 调用第一个 API 来初始化一些 arraylist。然后在每个间隔之后,调用第二个 API,该 API 调用生产者发送消息,这些消息被侦听器进一步消费。控制器(第二个 API)基本上将接收到的消息的 JSON 字符串返回给 UI。
- 我没有在本地使用任何 Web 服务器,而是使用 tomcat7 插件来运行我的 spring 项目
mvn tomcat7:run。我启动本地 AMQ 服务器activemq start并使用npm start启动我的 UI 代码
下面是我的 ReactJs UI 代码 sn-p,它会调用 axios。
componentDidMount() {
this.callCreateConnection();
this.interval = setInterval(this.callStockUpdatesAPI, 15000);
}
componentWillUnmount() {
clearInterval(this.interval);
}
async callCreateConnection() {
await axios
.get("http://localhost:8080/stock-market-ticker/createConnection", {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET",
},
})
.then((res) => {
console.log("Response", res.data);
})
.catch((error) => {
console.log("Error", error);
});
}
async callStockUpdatesAPI() {
console.log("Inside api");
await axios
.get("http://localhost:8080/stock-market-ticker/getStockUpdates", {
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET",
},
})
.then((response) => {
console.log("Response", response.data);
switch (response.data.symbol) {
case "TATAMOTORS":
let oldData_tata = { ...this.state.data };
oldData_tata[0].price = response.data.price;
oldData_tata[0].percent_change_1h = response.data.change_1hr;
oldData_tata[0].percent_change_24h = response.data.change_24hr;
this.setState({ data: oldData_tata });
break;
case "CIPLA":
let oldData_cipla = { ...this.state.data };
oldData_cipla[0].price = response.data.price;
oldData_cipla[0].percent_change_1h = response.data.change_1hr;
oldData_cipla[0].percent_change_24h = response.data.change_24hr;
this.setState({ data: oldData_cipla });
break;
case "ASIANPAINT":
let oldData_asian = { ...this.state.data };
oldData_asian[1].price = response.data.price;
oldData_asian[1].percent_change_1h = response.data.change_1hr;
oldData_asian[1].percent_change_24h = response.data.change_24hr;
this.setState({ data: oldData_asian });
break;
default:
return;
}
})
.catch((error) => {
console.log("Error", error);
});
}
我在https://github.com/hetalrachh/stock-market-ticker 分享了我的 Spring 应用程序代码。
我该如何解决这个问题?如果有人可以提供帮助。提前致谢。
【问题讨论】:
标签: java activemq spring-jms jms-topic