Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Jms Messenger Adapter Laravel Package

kunicmarko/jms-messenger-adapter

A Symfony Messenger adapter that lets JMS Serializer handle your message serialization, replacing the default PHP serializer so messages can travel as JSON, XML, or other JMS-supported formats with full metadata and type handling support.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • The package is not a Laravel package despite the framing. It is a Symfony bridge: it supplies a SerializerInterface implementation (Symfony Messenger transport serialization) that uses JMS Serializer to encode/decode an Envelope plus its Stamps, and it assumes Symfony's service wiring (bundle/DI config, transport serializer: option).
  • Laravel's queue layer has no Envelope/Stamp concept; it serializes jobs via SerializesModels and its own payload contract. Drop-in fit with Laravel is therefore very low. Fit is only reasonable if we already run symfony/messenger standalone inside the app — an uncommon pattern in a Laravel estate.
  • Value proposition is narrow: "use JMS Serializer instead of Symfony's native PHP serializer or Symfony Serializer for Messenger wire format." That is a ~2-class concern, not an architectural capability. 1.1.0 does not change this — it is a compatibility fix, not new capability.

Integration feasibility

  • Technically installable and small enough to read in an afternoon: register the serializer service, point a transport at it, configure JMS metadata. No infrastructure changes required — it sits inside the existing broker (AMQP/Redis/Doctrine) path.
  • Real friction is configuration and version alignment, not concept: JMS metadata driver setup, cache directory wiring, and matching jms/serializer + symfony/messenger constraints to our PHP runtime.
  • 1.1.0 improves this marginally: the "compatible with PHP 8" change removes what was previously a hard install blocker on our 8.1/8.2/8.3 runtimes. Treat as unblocked to try, not validated to run — see risk below.

Technical risk

  • Maintenance posture: dormant, now briefly stirred. The repo was archived with a final release 2021-06-16; 1.1.0 arrives as a single merged contribution (#22, PHP 8 compatibility). One release after a multi-year gap is a signal of a drive-by fix, not a resumed maintenance cadence. There is still no security response process, no CVE triage, no published support window, and no roadmap.
  • The PHP 8 claim needs verification, not acceptance. "PHP8 compatible" in a 2021-era codebase most likely means 8.0 syntax/removed-function fixes. It does not imply 8.1 deprecation cleanliness, 8.2 readonly/dynamic-property behaviour, or 8.3 support. It says nothing about Symfony 6.4/7.x or JMS Serializer 3.x attribute-based metadata. Expect composer constraint conflicts to persist on the Symfony/JMS axis even though the PHP axis may now resolve.
  • No ecosystem validation: still ~9 stars, 0 dependents, composite score 0.1275, opportunity 17.66. A single compatibility PR does not create a user base; defects still surface only in our environment.
  • Bus factor 1, effectively 0. The release was a one-off merge by a contributor, not an owner committing to stewardship. License remains MIT, so the real deliverable is source code to own, not a dependency to consume.
  • Serialization is an attack surface. Deserializing broker payloads through JMS opens the usual gadget-chain and type-confusion concerns; an unmaintained library handling untrusted messages is a poor place to accept risk. A PHP 8 fix does not address this.
  • No breaking changes in 1.1.0 — semver minor, no deprecations announced, so any prior evaluation artefacts remain comparable.

Key questions

  1. Do we actually operate Symfony Messenger (which transports, which apps), or is this being evaluated for a Laravel codebase where it cannot apply?
  2. Is JMS Serializer a hard requirement — existing message contracts, annotations/attributes, custom handlers — or is it an incidental preference?
  3. New: Does 1.1.0 actually resolve our PHP runtime, or only shift the failure to symfony/messenger and jms/serializer constraints? Spike must prove the full matrix, not just PHP.
  4. Is the wire format a cross-team contract (other producers/consumers must share JMS metadata), or internal to one service?
  5. Can we pin PHP/Symfony/JMS versions for the life of the integration — and has anyone signalled an intent to keep releasing beyond this one PR?
  6. Are we willing to fork, vendor, and own this code, with CI, before the first production message is sent?

Integration Approach

Stack fit

  • Laravel-first estate: poor fit — recommendation unchanged, do not proceed. Use Laravel's queue with typed DTOs and an explicit JSON serializer, or adopt symfony/messenger standalone deliberately and use its first-party Symfony Serializer integration.
  • Symfony estate already on JMS Serializer: conceptually good fit; 1.1.0 makes it installable on PHP 8, which was previously the first blocker. Still treat as "source to fork," not "package to require."

Migration path

  1. Do not add this as a live dependency without an owner. Read the source; it is small.
  2. If JMS Serializer is mandated by an existing message contract, copy the serializer into our codebase under an internal namespace (MIT permits) or fork the repo, pin it at 1.1.0 (the first PHP 8–viable tag), and add a CI matrix.
  3. If JMS is not mandated, use Symfony Messenger's built-in Symfony Serializer with a normalizer, or a thin hand-written JSON serializer — fewer moving parts, supported upstream.
  4. On Laravel, prefer a custom job-payload serializer over introducing Messenger solely to use this adapter. 1.1.0 does not create a Laravel integration path.

Compatibility

  • Updated: PHP 8 is now nominally supported; verify which minors. Do not assume 8.2/8.3. Run the spike on our oldest and newest targets.
  • Unchanged and now the primary blocker: symfony/messenger 6.4/7.x and jms/serializer 3.x. Expect to patch or relax constraints; 1.1.0 did not touch these.
  • JMS annotation → PHP attribute migration is likely required; annotation support is deprecated/removed in modern setups. 1.1.0 did not address metadata driver modernisation.
  • Confirm the envelope/stamp set we actually use is representable — non-serializable stamps are a common integration break.

Sequencing

  1. Spike (≈1 week, scope narrowed): install 1.1.0 on a branch against our real runtime — this is now a legitimate starting point rather than a known-broken one. Send/receive one message end-to-end over the target transport; document remaining Symfony/JMS breakages. The PHP 8 question is largely answered; the Symfony/JMS question is not.
  2. Decision gate: fork-and-own vs. build-thin vs. drop. Default recommendation: drop unless JMS is contractual. 1.1.0 lowers the cost of the spike, not the cost of ownership.
  3. If forking: vendor internally pinned at 1.1.0, add CI matrix (PHP × Symfony × JMS), and golden-file wire-format tests that lock producer/consumer compatibility.
  4. Pilot: single low-risk transport, one consumer group, with dead-letter monitoring.
  5. Rollout: only after wire-format tests are green and cache warmup is in the deploy pipeline.

Operational Impact

Maintenance

  • Still effectively unmaintained, with one data point of life. Do not re-baseline the maintenance estimate on 1.1.0. Budget a few days per year for dependency bumps plus recurring work at every Symfony major and PHP minor, and assume no future release — if one arrives, treat it as a bonus, not a plan input.
  • Practical upside of 1.1.0: we fork from a base that starts on PHP 8 rather than one that requires an immediate port. That removes maybe 1–2 days of initial fork work, not the recurring cost.

Support

  • MIT, previously archived, no community channel, no stated maintainer commitment after this PR. Every incident is ours to diagnose. On-call runbooks must be written by us, including "how to decode a stuck message manually."
  • Reassess only if a second release lands within a reasonable window and touches the Symfony/JMS axis — that would be the first real evidence of resumed stewardship.

Scaling

  • The serializer itself is stateless and scales horizontally without concern; the broker remains the bottleneck. Unchanged by 1.1.0.
  • Watch JMS metadata/reflection cost and file-cache warmup — ensure cache is built during deploy, not lazily per container, or cold starts will spike latency. Re-verify on PHP 8, where opcache/JIT defaults differ from the 7.x assumptions this code was written under.
  • Payload size: JMS JSON output is typically larger than PHP native serialization; relevant if we are near broker limits (e.g., SQS 256 KB).

Failure modes

  • Class rename/move breaks deserialization — messages dead-letter with no compile-time warning.
  • New or unconfigured Stamp types silently dropped or throw at consume time.
  • Producer/consumer version skew on message classes → type errors discovered only in production consumption.
  • Deserialization of untrusted broker payloads without a maintained library — hardening gap; a PHP 8 compatibility merge is not a security review.
  • Cache directory permission/volume issues in multi-container deploys.
  • Wire-format lock-in: once other services depend on the JMS shape, changing it is a coordinated migration.
  • New: PHP 8.1+ deprecation noise from a pre-8 codebase surfacing as log spam or, where deprecations are promoted to errors, as runtime failures in paths the single PR did not exercise.

Ramp-up

  • Low technical ramp: small, readable codebase; engineers fluent in JMS Serializer and Messenger need hours, not days.
  • Organizational ramp is the real cost: knowledge concentrates in one or two people, and the decision to own a fork needs explicit owner sign-off before adoption. 1.1.0 does not widen that.

Bottom line: 1.1.0 is a genuine but narrow improvement — it clears the PHP 8 install blocker that previously short-circuited evaluation. It does not change the fundamentals: dormant project, no dependents, no security process, unresolved Symfony 6.4/7 and JMS 3.x compatibility, and a one-off PR rather than a maintained cadence. Recommendation is unchanged: do not adopt as a dependency. If we have a contractual JMS Serializer requirement, use 1.1.0 as the fork base for an internally owned, CI-covered serializer; otherwise standardize on first-party Symfony Serializer support or a thin in-house implementation.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource