Skip to content

Allow MessageHeaderAccessor to be created with existing headers #33153

Closed
@Nephery

Description

@Nephery

This issue was split from PR: #33137


Add a constructor that lets users create a MessageHeaderAccessor object given only a headers map.

This is a small optimization in high volume scenarios to avoid creating unnecessary Message<?> objects when you only have a headers map.

The specific use case I'm looking at, is being able to create a MessageHeaderAccessor object to process headers from a "consolidated headers" object (such as from the Rabbit Binder or Solace Binder) created for a Message<List<?>> consumed from Spring Cloud Stream's batched consumers.

e.g.: Being able to do something like this:

@Bean
Consumer<Message<List<Payload>>> input() {
	return batchMsg -> {
		List<Payload> batchedPayloads = batchMsg.getPayload();
		List<Map<String, Object>> batchedHeaders = (List<Map<String, Object>>) batchMsg.getHeaders().get(SolaceBinderHeaders.BATCHED_HEADERS);

		for (int i = 0; i < batchedPayloads.size(); i++) {
			Map<String, Object> headersMap = batchedHeaders.get(i);
			MessageHeaderAccessor accessor = null;
			if (headersMap instanceof MessageHeaders headers) {
				accessor = MessageHeaderAccessor.getAccessor(headers, null);

			}
			if (accessor == null || || !headers.isMutable()) {
				accessor = new MessageHeaderAccessor(headersMap);
			}

			// Do some logic with the accessor
		}
	};
}

With the current implementation, instead of just being able to do:

MessageHeaderAccessor accessor = new MessageHeaderAccessor(headersMap);

I would need to do this, which is pointless if the accessor's constructor will just extract the headers from the Message<?>:

MessageHeaderAccessor accessor = new MessageHeaderAccessor(new GenericMessage<?>(payload, headersMap));

Metadata

Metadata

Assignees

Labels

in: messagingIssues in messaging modules (jms, messaging)type: enhancementA general enhancement

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions