The common solution for this is not to subscribe to the change in the data bag but to sensibly handle the result of the change.
It seems that you describe a version of a software to be installed there. Thus, a sensible approach would be to perform these steps during each chef run:
- check if the currently installed version of the software is the same as the one currently defined in the data bag
- if it matches, do nothing
- if it differs, update the software
That way, you don't need any actual publish/subscribe architecture but just handle everything during your regular chef runs.
In fact, this general approach is how about all providers in Chef work: check the current state and adapt it if it differs from the intended state as defined by the recipe.