在apacheflume中获取jms头

zlwx9yxi  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(447)

我尝试使用apacheflume使用jms消息(ibmwebspheremq)并将数据存储到hdfs。在阅读邮件时,我只能看到邮件的正文,而看不到邮件的标题内容。
是否可以使用apacheflume读取带有header属性的jms消息?
我的配置:


# Source definition

u.sources.s1.type=jms
u.sources.s1.initialContextFactory=ABC
u.sources.s1.connectionFactory=<my connection factory>
u.sources.s1.providerURL=ABC
u.sources.s1.destinationName=r1
u.sources.s1.destinationType=QUEUE

# Channel definition

u.channels.c1.type=file
u.channels.c1.capacity=10000000
u.channels.c1.checkpointDir=/checkpointdir
u.channels.c1.transactionCapacity=10000
u.channels.c1.dataDirs=/datadir

# Sink definition

u.sinks.r1.type=hdfs
u.sinks.r1.channel=c1
u.sinks.r1.hdfs.path=/message/%Y%m%d
u.sinks.r1.hdfs.filePrefix=event_
u.sinks.r1.hdfs.fileSuffix=.xml
u.sinks.r1.hdfs.fileType = DataStream
u.sinks.r1.hdfs.writeFormat=Text
u.sinks.r1.hdfs.useLocalTimeStamp=TRUE
cunj1qz1

cunj1qz11#

有很多类型的jms消息,如这里的“表30–2 jms消息类型”所示。
Flume DefaultJMSMessageConverter 使用 TextMessage 如下所示,供您参考:

...
else if(message instanceof TextMessage) {
      TextMessage textMessage = (TextMessage)message;
      event.setBody(textMessage.getText().getBytes(charset));
    } 
...

textmessage只提供消息的正文。
伊莫,你有两个选择:
如果可能的话,在正文中发送消息头、头值对,并按原样使用“defaultjmsmessageconverter”。
通过编写一个定制的jmsmessageconverter构建您自己的“flume jms source.jar”,并将“message”类型转换为javax.jms.message,获取jms头,将它们设置为 SimpleEvent .
希望这能给我们一些指导。

相关问题