使用netty TCP的JMS侦听器

使用netty TCP的JMS侦听器,tcp,jms,listener,netty,Tcp,Jms,Listener,Netty,我正在尝试使用TCP开发Netty。我正在使用IBM MQ客户机连接到MQ代理,其想法是我需要开发一个TCP服务器,该服务器接收消息并将其传递到MQ,如果服务器响应,则将其发送到发送请求的客户机。因此,我需要为异步消息实现一个JMS侦听器。问题是JMS侦听器不在Netty通道中,我正在尝试找出如何读取消息并将其添加到Netty通道,然后立即将其发送到连接到TCP套接字的客户端。我可以完美地发送消息。问题是服务器何时响应。我收到消息,从clientConnectionProvider获取上下文/频

我正在尝试使用TCP开发Netty。我正在使用IBM MQ客户机连接到MQ代理,其想法是我需要开发一个TCP服务器,该服务器接收消息并将其传递到MQ,如果服务器响应,则将其发送到发送请求的客户机。因此,我需要为异步消息实现一个JMS侦听器。问题是JMS侦听器不在Netty通道中,我正在尝试找出如何读取消息并将其添加到Netty通道,然后立即将其发送到连接到TCP套接字的客户端。我可以完美地发送消息。问题是服务器何时响应。我收到消息,从
clientConnectionProvider
获取上下文/频道,然后我
writeAndFlush
,但我没有看到消息到达客户端

我在主类中创建侦听器

公共类主{
专用最终整数端口;
专用最终目的地发送目的地;
私有最终JMSContext jmsSendContext;
私人最终JMS消费者;
私有最终JMSContext jmsRecieveContext;
私人最终目的地消费者目标;
专用最终ClientConnectionProvider ClientConnectionProvider;
公用干管(物业)
性感觉异常{
if(properties.containsKey(ConfigurationEnum.SERVER\u端口){
this.port=properties.getProperty(ConfigurationEnum.SERVER\u端口)
}否则{
log.error(“属性中未定义server.port”
抛出新的配置异常(
格式(“属性中未定义server.port”);
}
JmsFactoryFactory ff=JmsFactoryFactory.getInstance(JmsConstants.WMQ_提供程序);
JmsConnectionFactory cf=ff.createConnectionFactory();
//设置属性
cf.setStringProperty(CommonConstants.WMQ_主机名,
getProperty(ConfigurationEnum.IBM_MQ_HOST.getValue());
cf.setIntProperty(CommonConstants.WMQ_端口,
parseInt(properties.getProperty(ConfigurationEnum.IBM_MQ_PORT.getValue());
cf.setStringProperty(CommonConstants.WMQ_通道,
getProperty(ConfigurationEnum.IBM_MQ_CHANNEL.getValue());
cf.setIntProperty(CommonConstants.WMQ_连接模式,WMQConstants.WMQ_CM_客户端);
cf.setStringProperty(CommonConstants.WMQ_队列管理器,
getProperty(ConfigurationEnum.IBM_QUEUE_MANAGER.getValue());
cf.setStringProperty(CommonConstants.WMQ_应用程序名,“固定管弦乐队网关”);
cf.setBooleanProperty(JmsConstants.USER_AUTHENTICATION_MQCSP,true);
cf.setStringProperty(JmsConstants.USERID,properties.getProperty(ConfigurationEnum.IBM_APP_USER.getValue());
cf.setStringProperty(JmsConstants.PASSWORD、properties.getProperty(ConfigurationEnum.IBM_APP_PASS.getValue());
clientConnectionProvider=新clientConnectionProvider();
jmsRecieveContext=cf.createContext();
consumerDestination=jmsRecieveContext
.createQueue(properties.getProperty(ConfigurationEnum.IBM_QUEUE_CONSUMER.getValue());
consumer=jmsRecieveContext.createConsumer(consumerDestination);
consumer.setMessageListener(新的JMSMessageListener(clientConnectionProvider));
jmsRecieveContext.start();
jmsSendContext=cf.createContext();
sendDestination=jmsSendContext
.createQueue(properties.getProperty(ConfigurationEnum.IBM_QUEUE_TRANSACTION.getValue());
}
public void start()引发InterruptedException{
EventLoopGroup bossGroup=新的NioEventLoopGroup(1);
EventLoopGroup workerGroup=新的NioEventLoopGroup(10);
试一试{
ServerBootstrap ServerBootstrap=newserverbootstrap();
serverBootstrap.group(bossGroup,workerGroup.channel)(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG,100)。option(ChannelOption.SO_KEEPALIVE,Boolean.TRUE)
.handler(新的LoggingHandler(LogLevel.INFO))
.childHandler(新的DefaultChannelInitializer());
//启动服务器。
ChannelFuture f=serverBootstrap.bind(port.sync();
//等待服务器套接字关闭。
f、 通道().closeFuture().sync();
}最后{
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
jmsRecieveContext.stop();
jmsRecieveContext.close();
jmsSendContext.close();
}
}
公共静态void main(字符串[]args)引发InterruptedException{
属性=新属性();
try(InputStream-InputStream=newfileinputstream(args[0])){
属性。加载(inputStream);
新建Main(properties.start();
}catch(filenotfounde异常){
错误(“未找到路径{}中指定的属性文件。”,args[0],e);
}捕获(IOE异常){
log.error(“有一个IO错误。”,e);
}捕获(JME){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(配置异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
侦听器是一个简单的类

@allargsconstuctor
公共类JMSMessageListener实现MessageListener{
专用最终ClientConnectionProvider ClientConnectionProvider;
@凌驾
消息(消息消息)上的公共无效{
试一试{
String messageString=message.getBody(String.class);
if(clientConnectionProvider.contains(ClientID.get(messageString))){
ClientConnection cc=clientConnectionProvider.getConnection(ClientID.get(messageString));
if(cc.getCtx()==null){