You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Ansgar Sachs (Jira)" <ji...@apache.org> on 2020/03/03 16:14:00 UTC
[jira] [Created] (ARTEMIS-2639) Lost properties on divert of
"activemq.notifications"
Ansgar Sachs created ARTEMIS-2639:
-------------------------------------
Summary: Lost properties on divert of "activemq.notifications"
Key: ARTEMIS-2639
URL: https://issues.apache.org/jira/browse/ARTEMIS-2639
Project: ActiveMQ Artemis
Issue Type: Bug
Components: Broker, OpenWire
Affects Versions: 2.11.0
Reporter: Ansgar Sachs
{quote}As developer, I expect proper ActiveMQ Notifications, when consuming only some of them{quote}
h3. Steps to reproduce
1a) Create a broker and add the following:
{code:java}
<divert name="consumer-notification-divert">
<address>activemq.notifications</address>
<forwarding-address>jms.consumer.notifications</forwarding-address>
<filter string="_AMQ_NotifType = 'CONSUMER_CREATED' OR _AMQ_NotifType = 'CONSUMER_CLOSED'"/>
</divert>
{code}
1b) Same situation for:
{code:java}
<addresses xmlns="urn:activemq:core">
<address name="activemq.notifications">
<anycast>
<queue name="jms.consumer.notifications">
<durable>true</durable>
<filter string="_AMQ_NotifType = 'CONSUMER_CREATED' OR _AMQ_NotifType = 'CONSUMER_CLOSED'"/>
</queue>
</anycast>
</address>
</addresses>
{code}
2) Consume those messages with a MDB
{code:java}
@MessageDriven(
name = "Notification_Subber",
activationConfig = {
@ActivationConfigProperty(propertyName = "destination", propertyValue = "jms.consumer.notifications"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "useJndi", propertyValue = "false"),
}
)
public class NotificationMDB implements MessageListener {
public void onMessage(Message message) {
// Log message here
}
}
{code}
h3. Expected Behavior
I would expect the same messages that are consumed as follows:
{code:java}
@MessageDriven(
name = "Notification_Subber",
activationConfig = {
@ActivationConfigProperty(propertyName = "destination", propertyValue = "activemq.notifications"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "useJndi", propertyValue = "false"),
}
)
public class NotificationMDB implements MessageListener {
public void onMessage(Message message) {
// Log message here
// This one actually returns all properties
}
}
{code}
h3. Current behavior
I guess that the filter includes some kind of message-copy workflow which removes all those properties?
h3. Workaround
Right now, the only workaround for this issue is a custom transformer, which does the following:
{code:java}
public class NotificationsTransformer implements Transformer {
private static final Logger log = Logger.getLogger(NotificationsTransformer.class.getName());
public Message transform(Message message) {
try {
log.finest(String.format("Transform CoreMessage: %s", message.toString()));
message.putStringProperty("event_timestamp", message.getStringProperty("_AMQ_NotifTimestamp"));
message.putStringProperty("address_name", message.getStringProperty("_AMQ_Address"));
message.putStringProperty("event_type", message.getStringProperty("_AMQ_NotifType"));
message.putStringProperty("queue_name", message.getStringProperty("_AMQ_RoutingName"));
} catch (Exception e) {
log.warning(String.format("Failed to transform message: %s", e.getMessage()));
}
return message;
}
}
{code}
h3. Steps to achieve victory
(x) Find the errorneous message copy
(x) Forward all message properties
--
This message was sent by Atlassian Jira
(v8.3.4#803005)